看看下面的方法是否有用。它假设一个项目由三个模块构成,如下所示:
Top-level
âââ Project-1
âââ Project-2
âââ Project-3
……各种版本的番石榴扮演着
Module-A
就像你描述的那样。
顶层
build.gradle
以下内容:
ext {
project1GuavaVersions = ['26.0-jre','27.0-jre']
project2GuavaVersions = ['25.0-jre','26.0-jre']
if(project1GuavaVersions.disjoint(project2GuavaVersions)) {
throw new GradleException('No common version(s) of Guava defined')
} else {
project3GuavaVersion = new HashSet(project1GuavaVersions + project2GuavaVersions).max()
}
subprojects {
apply plugin: 'java'
}
用于为每个模块指定可接受的番石榴版本的额外属性。project-3的版本计算为project-1和project-2之间使用的最新版本。(另外,为了方便起见,Java插件被应用到三个子项目中)。
项目1
平地
以下内容:
archivesBaseName = 'project1'
repositories {
mavenCentral()
}
dependencies {
implementation "com.google.guava:guava:[${project1GuavaVersions.join(',')}]"
}
project-1的番石榴版本的额外属性被插入,并从字符串列表转换为逗号分隔的字符串。这使用了gradle使用常春藤符号指定一系列版本的能力,即
[26.0-jre,27.0-jre]
.
项目2
build.gradle公司
:
archivesBaseName = 'project2'
repositories {
mavenCentral()
}
dependencies {
implementation "com.google.guava:guava:[${project2GuavaVersions.join(',')}]"
}
(与项目1类似)
项目-3
build.gradle公司
:
archivesBaseName = 'project3'
repositories {
mavenCentral()
}
dependencies {
implementation project(':project1')
implementation project(':project2')
implementation "com.google.guava:guava:$project3GuavaVersion"
}
project-1和project-2被定义为项目级依赖项,这里使用定义为额外属性的guava显式计算版本。
我希望这能涵盖一切。如果没有别的,我希望它能激发一些新的想法!
更新
正如你在评论中提到的,你的项目不是分层设置的,你也可以在一个“扁平”的安排中设置它们,其中所有的项目都存在于相同的文件夹深度,比如:
(root)
âââ project1
â  âââ build.gradle
âââ project2
â  âââ build.gradle
âââ project3
â  âââ build.gradle
âââ master
  âââ build.gradle
  âââ settings.gradle
这里的“master”是一个特别命名的项目,它与其他项目并驾齐驱。
settings.gradle
应该搬进
master
应该使用
Settings.includeFlat()
指示要包含以相同级别存在的项目:
includeFlat 'project1'
includeFlat 'project2'
includeFlat 'project3'
我最初建议的解决方案的详细信息应适用于此设置。