我想我在Gradle中的依赖项管理工作原理上遗漏了一些要点。
project
---api
------api-commons
------api-v1
------api-v2
------api-v3
其中所有的api*
目录都是模块。所有的api-v*
都需要一个特定的依赖项(比如common-dependency
)。
我的目标是将其导入api-commons build.gradle
文件:
dependencies {
implementation 'common-dependency'
}
而在其他模块api-v*
的build.gradle
文件中,放入:
dependencies{
implementation project(':api:api-commons')
}
我本希望这样做,但事实并非如此。api-v*
模块中的代码只是表现得像没有声明依赖关系一样。实际上,如果我在单个模块中导入依赖关系,代码就会像预期的那样工作。
我是不是做了一个错误的假设?依赖继承不就是这样工作的吗?
2条答案
按热度按时间i2byvkas1#
在
implementation
配置中声明依赖项在概念上意味着它是模块内部的(它用于实现中,但不是公共API的一部分)。这样的依赖项不会向使用者的编译类路径公开,但它仍将位于运行时类路径上。这种建模依赖关系的方法的一个优点是,如果实现依赖关系发生变化,您不需要重新编译使用项目。另一个优点是,通过封装依赖关系,使用者不太可能直接依赖于它们,然后在您更改依赖关系时中断。
如果你想把依赖关系公开给消费者,你必须把它声明为模块API的一部分,你可以通过应用
java-library
插件和使用api
配置来实现。示例:
请在Gradle用户指南中了解更多信息
oyt4ldly2#
比方说,我必须将下面的公共代码(*.java文件)从下面的2个服务/模块移动到共享库服务/模块内部的共享处理数据:
步骤0:
在shared- service/modules文件夹中,在现有共享库模块内创建附加模块
将其命名为共享处理数据
步骤1:
在此模块内移动(重构)通用代码
步骤2:
在父文件夹(根目录)中更新settings.gradle文件
步骤3:
在每个abc服务和xyz-flow服务模块中,更新build.gradle文件