gpt4 book ai didi

gradle - 将所有依赖项从一个 Gradle 模块导入到另一个

转载 作者:行者123 更新时间:2023-12-03 03:10:14 29 4
gpt4 key购买 nike

我的构建中有两个模块,一个 Android 应用程序和一个 Java 库。 (旁白,Java 库是针对 Android 应用程序中的类运行 jvm 测试。由于它需要 Gradle Java 插件并且与 Gradle Android 插件不兼容,我不得不将它们拆分出来。)

在 java 模块中,我想自动导入其他模块的所有依赖项,以避免必须保持同步。

如何配置一个模块的compileTest 依赖关系来匹配另一个模块的compile 依赖关系?

(欢迎使用这两个插件的替代建议。)

最佳答案

如果你这样写,你将得到module1的compile依赖作为module2中的testCompile依赖:

dependencies { 
testCompile project(':module1')
}

在module2的build.gradle文件中。正如您自己在评论中所述,如果未在模块 2 中应用,您将不会从模块 1 中应用的 android 插件获得依赖项。

编辑:添加了以下关于如何在单独的脚本中定义依赖项的说明。

如评论中所述,另一种方法是在定义每个第 3 方依赖项的单独脚本中添加属性。我倾向于在我参与的每个多项目构建中都这样做。实际上,因为我已经习惯了 dependencies.gradle 文件的存在,所以我实际上是在单个项目上这样做的项目 build 也是如此。

这个想法很简单:

  • 添加一个单独的脚本,其中包含定义您的第 3 方依赖项的属性
  • 在每个模块中应用这个脚本
  • 使用属性而不是到处重复硬编码

这样你就可以在一个地方定义所有的依赖关系,增加依赖定义的可读性,并且你的模块永远不会彼此“不同步”(例如,两个模块依赖于同一个库的不同版本) .一个额外的好处是您可以将多个属于同一属性的依赖项组合在一起。

示例:

假设我们有问题中描述的 2 个模块。模块 1 使用一些第 3 方库。模块 2 应该测试模块 1,并且需要模块 1 中定义的每个库以及它自己的一些库。

dependencies.gradle

ext {
JAVAX_MAIL = 'javax.mail:mail:1.4.5'
JODA_TIME = 'joda-time:joda-time:2.1'
LOG4J = 'log4j:log4j:1.2.16'
SPOCK = [
'org.spockframework:spock-core:0.7-groovy-2.0',
'org.objenesis:objenesis:1.2',
'cglib:cglib-nodep:2.2.2'
]

// Note: I don't usually combine dep's like this, it's just for illustration.
// I prefer to spell them out to make it more explicit.
MODULE_1_DEPS = [ JAVAX_MAIL, LOG4J ]
}

module1/build.gradle

apply from: "$rootDir/dependencies.gradle"

dependencies {
compile MODULE_1_DEPS
}

module2/build.gradle

apply from: "$rootDir/dependencies.gradle"

dependencies {
compile JODA_TIME, LOG4J
testCompile MODULE_1_DEPS, SPOCK
}

注意:如果您将属性“组合”到列表的列表中,您可能必须展平列表。 IE。类似于:MY_DEP = [ DEP1, DEP2 ].flatten()也许 gradle 会为你做这件事,老实说我不知道​​——我还没有测试过。

另请注意:此处的示例只是说明如何实现您想要的,它们并不完整。

关于gradle - 将所有依赖项从一个 Gradle 模块导入到另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19392684/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com