多模块项目依赖配置优化:如何让项目A间接引用模块C?
关于多模块Gradle依赖传递的解决方案
嘿,这个问题其实戳中了Gradle依赖配置里很关键的传递性规则,我给你理得明明白白的~
首先直接给结论:不能直接只保留模块B里的implementation project(':C')就让项目A用C的功能,但只要改个配置就能实现你想要的效果!
为什么当前配置不行?
你现在模块B用的是implementation来声明对C的依赖,Gradle里的implementation是非传递性依赖——简单说就是,只有模块B自己能访问C的所有功能,而依赖B的项目A是“看不到”C的类、方法这些内容的,要是A里直接写调用C的代码,编译肯定会报错。
正确的配置方式
只需要改两个地方:
- 模块B的
build.gradle里,把依赖声明改成:api project(':C') - 项目A的
build.gradle里,只需要保留对B的依赖就行,删掉对C的直接依赖:implementation project(':B')
原理说明
api是Gradle里的传递性依赖配置,当你用api声明B对C的依赖时,所有依赖B的模块(比如你的项目A)都会自动获得对C的依赖权限,这样A就能正常调用C的功能了,完全不需要再单独声明对C的依赖。
如果之后你不想把C的全部功能都暴露给A,还可以考虑通过B封装C的功能(比如在B里写适配层,只暴露需要给A用的接口),但如果只是想简单实现“通过B间接让A用C”,上面的方案最直接高效。
内容的提问来源于stack exchange,提问作者Aman Singh
相关产品推荐
相关产品推荐

