#java #gradle #groovy #build.gradle
#java #gradle #groovy #build.gradle
Вопрос:
Можно ли указать resolutionStrategy в корне build.gradle
, который применяется в подпроектах? Я могу заставить его работать, только если resolutionStrategy добавлен непосредственно в файл подпроекта build.gradle
.
subprojects {
configurations.all {
resolutionStrategy {
eachDependency { DependencyResolveDetails details ->
if(details.requested.group == 'org.apache.logging.log4j') {
details.useVersion '2.15.0'
}
}
}
}
}
Когда я помещаю это в свой root build.gradle
и запускаю ./gradlew :subproject:dependencies
, стратегия не применяется. Однако, когда я помещаю тот же блок конфигурации внутри подпроекта build.gradle
, он работает так, как ожидалось.
Ответ №1:
Работает для меня так, как у вас с Gradle 7.3 в быстром тестовом проекте, который я написал:
➜ ./gradlew :module-a:dependencyInsight --dependency log4j
> Task :module-a:dependencyInsight
org.apache.logging.log4j:log4j:2.15.0 (selected by rule)
variant "compile" [
org.gradle.status = release (not requested)
org.gradle.usage = java-api
org.gradle.libraryelements = jar (compatible with: classes)
org.gradle.category = library
Requested attributes not found in the selected variant:
org.gradle.dependency.bundling = external
org.gradle.jvm.environment = standard-jvm
org.gradle.jvm.version = 17
]
org.apache.logging.log4j:log4j:2.14.1 -> 2.15.0
--- compileClasspath
Комментарии:
1. Ах, похоже, что каким-то образом плагин управления зависимостями spring boot переопределяет это. Возможно, он выполняется в определенном порядке, который сводит на нет resolutionStrategy. В проектах, отличных от spring, он работает без изменений. В весенних проектах я также должен установить
ext['log4j2.version'] = '2.15.0'
, и тогда все работает2. Плагин управления зависимостями Spring немного «жадный», поэтому вы не можете точно смешивать оба стиля (Spring / Native Gradle). Посмотрите этот отличный доклад: youtube.com/watch?v=AADeX1AEmzU