префикс gradle исключить зависимости

При разработке приложений Hadoop очень быстро требуется много подмодулей основного проекта Hadoop. Чтобы принудительно установить конкретную версию, я, как автор своей собственной работы с Hadoop, хотел бы изменить версию Hadoop для транзитивных библиотек.

т.е. для всех зависимостей hadoop-* и транзитивных зависимостей я хочу установить для них версию foo.bar.baz

Как я могу добиться этого с помощью Gradle без необходимости вручную указывать каждый модуль?


person Georg Heiler    schedule 14.04.2020    source источник


Ответы (2)


Вы захотите написать собственное правило разрешения зависимостей. Например:

configurations.all {
    resolutionStrategy.eachDependency {
        if (requested.group == "org.apache.hadoop") {
            useVersion("3.2.1")
            because("some description why this version is needed.")
        }
    }
}

См. https://docs.gradle.org/current/userguide/resolution_rules.html

Альтернативой вышеизложенному является создание/публикация собственной пользовательской платформы. или "ВОМ".

person Francisco Mateo    schedule 15.04.2020
comment
Можно ли также поместить это в другую область и применить это правило только к конкретной зависимости (и ко всему, что оно транзитивно втягивает)? - person Georg Heiler; 15.04.2020

Если вы используете Gradle 6+, я настоятельно рекомендую изучить специальную главу на выравнивание зависимостей и, в частности, часть об использовании виртуальных платформ< /а>. Это в сочетании с строгим ограничением версии должно дать вам результат тебе нужно.

Если вам нужно поддерживать более широкий спектр версий Gradle, ответ Франсиско Матео с правилом разрешения является допустимым подходом.

person Louis Jacomet    schedule 15.04.2020
comment
Нет Gradle 6.2 - если нужно, подойдет и 6.3. - person Georg Heiler; 15.04.2020
comment
Однако для работы strict мне нужно знать точную конфликтующую зависимость, а также мне нужно перечислить все подмодули, т.е. в случае с hadoop это большое число. - person Georg Heiler; 15.04.2020