Почему введение модуля-родителя изменяет правила / порядок зависимостей этого модуля в Gradle 5? - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть два модуля:

  • base-lib
  • service

base-lib имеет некоторые зависимости Spring Boot / Security, а такженекоторые лазурные.Для Azure требуется определенная версия nimbusds, поэтому я установил эту зависимость для конкретной версии (5.64.4).Когда я сам собираю этот первый модуль, Gradle загружает только 5.64.4.Но когда я включаю его как проектную зависимость другого модуля (который имеет нет других зависимостей), тогда он загружает две версии: 5.64.4 и 6.0.Почему это может быть иначе?

base-lib: build.gradle

buildscript {

    repositories {
        mavenCentral()
        mavenLocal()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

apply plugin: "java"
apply plugin: "java-library"
apply plugin: "org.springframework.boot"
apply plugin: "io.spring.dependency-management"

group "${group}"
version "${version}"

sourceCompatibility = 11.0

repositories {
    mavenCentral()
    mavenLocal()
}

dependencies {

    api( [ "com.nimbusds:oauth2-oidc-sdk:5.64.4" ] )

    /* These are what pulls in 6.0 */
    api( [ "org.springframework.boot:spring-boot-starter-security:${springBootVersion}" ] )
    api( [ "org.springframework.security.oauth.boot:spring-security-oauth2-autoconfigure:${springBootVersion}" ] )
    api( [ "org.springframework.security:spring-security-oauth2-client:${springOAuthClientVersion}" ] )

    //Microsoft Azure AD
    api( [ "com.microsoft.azure:adal4j:${adal4jVersion}" ] )

    /* elided, lot's of other dependencies here */
}

service build.gradle

dependencies {
    implementation project(":base-lib")
}

Если я удаляю второй модуль (service) и собираю первый, он загружает только 5.64.4.Но в тот момент, когда у меня есть и то, и другое, я собираю их, он тоже падает на 6.0.

Это исправляет это, но зачем это нужно , когда используется как зависимость проекта , а не нормально?Почему правила зависимости отличаются?

api( [ "com.nimbusds:oauth2-oidc-sdk:5.64.4" ] ) {
    force = true
}

1 Ответ

0 голосов
/ 20 декабря 2018

Лучший способ решить эту проблему - использовать задачу dependencyInsight для проблемной зависимости.

В вашем случае наиболее вероятным объяснением является то, что ваш проект base-lib использует подключаемые модули Spring boot и Spring для управления зависимостями.Эти плагины принудительно запускают несколько версий в соответствии с загрузочной спецификацией Spring, но также имеют функцию , которая делает любую зависимость, объявленную с версией, перезаписывающей то, что исходит из спецификации.И так как вы указываете версию oauth2-oidc-sdk, она действительно получает эту версию.

Теперь, когда вы транзитивно извлекаете все эти зависимости в service, плагин управления зависимостями не применяется.И, таким образом, применяются стандартные правила разрешения Gradle, что означает, что между версиями 5.64.4 и 6.0 Gradle выберет самое высокое.

Исправление может быть выполнено путем принудительного использования версии в ходе эксперимента или применения того же самогоплагины и объявив его снова.

...