Согласно этой документации Gradle Управление транзитивными зависимостями , если вы не указываете какие-либо конкретные ограничения для разрешения транзитивных зависимостей, должна быть выбрана самая высокая версия модулей ATLAS:
Когда Gradle пытается разрешить зависимость от версии модуля, все объявления зависимостей с версией, все переходные зависимости и все ограничения зависимостей для этого модуля принимаются во внимание.Выбрана самая высокая версия, которая соответствует всем условиям.
Вы можете быстро проверить это поведение с помощью простой многопроектной сборки ниже:
settings.gradle
rootProject.name = 'demo'
include "A", "B", "C"
build.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