Два шага, гоняться переходной зависимость затем исключить его из библиотеки ответственной.
gradle dependencies
дает полный список, включая переходный. Если ваш проект небольшой, что может быть полезно, но для крупных корпоративных сборок ... слишком много информации. Не стесняйтесь искать его, но мы получаем больше информации о точке от dependencyInsight
.
gradle dependencyInsight --dependency someDependency
находит все места, в которые может входить зависимость. Если у вас несколько версий, это поможет сделать его очевидным, когда версии возникнут.
В моем журнале ввода данных явным образом объявляется как зависимость времени компиляции, поэтому она отображается ниже.Если log4j
был где-то еще, вы увидите библиотеку с нарушением, а также объявление времени компиляции для v 2.5
.
Я должен был выполнить это явно для каждого дополнительного модуля.
$ gradle util:dependencyInsight --dependency org.apache.logging.log4j
Configuration on demand is an incubating feature.
:util:dependencyInsight
org.apache.logging.log4j:log4j-api:2.5
+--- compile
\--- org.apache.logging.log4j:log4j-core:2.5
\--- compile
org.apache.logging.log4j:log4j-core:2.5
\--- compile
(*) - dependencies omitted (listed previously)
BUILD SUCCESSFUL
Total time: 0.933 secs
Теперь, когда вы знаете, где можно исключить зависимость, просто сделайте, как прежде, чтобы удалить ее. Вы можете подтвердить, запустив dependencyInsights
снова
dependencies {
// found through `gradle dependencyInsight --dependency org.apache.logging.log4j`
classpath("someOtherGroup:someOtherArtifactId:1.0") {
exclude group: 'org.apache.logging.log4j', module: 'log4j-slf4j-impl'
}
}
Другим решением может быть переопределение распознаватель зависимость и заставить версию 2.5
configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
if (details.requested.group == "org.apache.logging.log4j") {
println "Updating version for: $details.requested.group:$details.requested.name:$details.requested.version --> 2.5"
details.useVersion '2.5'
}
}
}
Мое мнение, я, вероятно, не хотят, чтобы добавлять проверки в resolutionStrategy
все время, поэтому, вероятно, лучше просто отследить его в dependencyInsights
. Также это означает обновление версии в двух местах, и если другой разработчик не знает о том, как работает, то у них будет «странное» поведение ... например. Я обновил log4j
до 2.7
, но он по-прежнему строит с 2.5
?!?!
Но оба действительны подходы
Для меня, кажется, что исключает в пути к классам, не имеет никакого эффекта ... – questionare
waiiiit минуты! [spring-boot-gradle-plugin] (http://mvnrepository.com/artifact/org.springframework.boot/spring-boot-gradle-plugin/1.3.2.RELEASE) не имеет log4j-slf4j-impl как транзитивная зависимость. Он идет откуда-то еще. – RaGe
Mhm no, как только я удаляю его из сценария градации, зависимость также исчезла. – questionare