根据这个 Gradle 文档管理传递依赖,如果您没有为传递依赖解析指定任何特定约束,则应选择 ATLAS 模块的最高版本:
当 Gradle 尝试将依赖关系解析为模块版本时,会考虑所有带有版本的依赖声明、所有传递依赖以及该模块的所有依赖约束。选择符合所有条件的最高版本。
您可以使用下面的简单多项目构建快速测试此行为:
设置.gradle
rootProject.name = 'demo'
include "A", "B", "C"
构建.gradle
subprojects{
apply plugin: "java"
repositories{
mavenCentral()
}
}
project(':A') {
dependencies{
implementation 'commons-io:commons-io:1.2'
}
}
project(':B') {
dependencies{
implementation project(":A")
implementation 'commons-io:commons-io:2.0'
}
}
project(':C') {
dependencies{
implementation project(":B")
implementation 'commons-io:commons-io:2.6'
}
}
然后您可以检查commons-io
选择了哪个版本,即2.6
:
./gradlew C:dependencies
runtimeClasspath - Runtime classpath of source set 'main'.
+--- project :B
| +--- project :A
| | \--- commons-io:commons-io:1.2 -> 2.6
| \--- commons-io:commons-io:2.0 -> 2.6
\--- commons-io:commons-io:2.6