gradle 从另一个模块导入依赖关系

bxjv4tth  于 2022-11-14  发布在  其他
关注(0)|答案(2)|浏览(273)

我想我在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*模块中的代码只是表现得像没有声明依赖关系一样。实际上,如果我在单个模块中导入依赖关系,代码就会像预期的那样工作。
我是不是做了一个错误的假设?依赖继承不就是这样工作的吗?

i2byvkas

i2byvkas1#

implementation配置中声明依赖项在概念上意味着它是模块内部的(它用于实现中,但不是公共API的一部分)。这样的依赖项不会向使用者的编译类路径公开,但它仍将位于运行时类路径上。
这种建模依赖关系的方法的一个优点是,如果实现依赖关系发生变化,您不需要重新编译使用项目。另一个优点是,通过封装依赖关系,使用者不太可能直接依赖于它们,然后在您更改依赖关系时中断。
如果你想把依赖关系公开给消费者,你必须把它声明为模块API的一部分,你可以通过应用java-library插件和使用api配置来实现。
示例:

// api-commons/build.gradle
plugins {
  id 'java-library'
}

dependencies {
   api 'common-dependency'
}

请在Gradle用户指南中了解更多信息

oyt4ldly

oyt4ldly2#

比方说,我必须将下面的公共代码(*.java文件)从下面的2个服务/模块移动到共享库服务/模块内部的共享处理数据:

  • abc服务
  • xyz服务
Address.java
Employee.java
Department.java
Vaccation.java
Name.java
City.java
Order.java

步骤0:

在shared- service/modules文件夹中,在现有共享库模块内创建附加模块
将其命名为共享处理数据

步骤1:

在此模块内移动(重构)通用代码

步骤2:

在父文件夹(根目录)中更新settings.gradle文件

rootProject.name = "root"
include 'abc-service'
include 'xyz-service'
include 'shared-libraries:sharedprocessing-data'

步骤3:

在每个abc服务和xyz-flow服务模块中,更新build.gradle文件

dependencies
 { 
   implementation project(':shared-libraries:sharedprocessing-data') 
 }

相关问题