как Gradle разрешает конфликтующие версии зависимостей - PullRequest
0 голосов
/ 14 мая 2019

Скажем, у меня есть 3 модуля с 3 различными файлами свойств build.gradle.

Модуль A v1 содержит следующие записи в build.gradle

ATLAS_VERSION = 1

Модуль B v1 содержит следующие записив build.gradle

ATLAS_VERSION = 2
MODULE_A_VERSION = 1

В модуле C v1 есть следующие записи в build.gradle

ATLAS_VERSION = 3
MODULE_B_VERSION = 1

Поэтому мой вопрос: какая версия ATLAS будет разрешена во время выполнения?

1 Ответ

1 голос
/ 14 мая 2019

Согласно этой документации 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...