首页 > 解决方案 > 从 gradle 中的几个冲突的传递依赖项中强制执行最高版本

问题描述

我在一个包含多个服务和库的大型项目中工作,主要是在grailsbuildergradle中。logback出于安全原因,我正在尝试更新库(例如)。

我已经在我们的一个库(比如our-logger)中更新了它,如下所示:

#our-logger/build.gradle
...
dependencies {
    ...
    compile 'ch.qos.logback:logback-classic:1.2.3'
    ...
}

当我更新服务(例如our-service)以使用新版本时,our-logger我会从其他库中获取 logback,并且 gradle 选择通过的较低版本cobertura和一些其他依赖项,而不是通过的更高版本our-logger

#our-service/build.gradle
...
apply plugin: 'cobertura'
...
dependencies {
    ...
    compile 'our-logger:9.99' # safe now with logback-1.2.3
    ...
}
~/our-service $ ./gradlew dependencies
...

cobertura
\--- net.sourceforge.cobertura:cobertura:2.1.1
     +--- ch.qos.logback:logback-classic:1.0.13 -> 1.1.11
     |    \--- ch.qos.logback:logback-core:1.1.11
...
compile - Dependencies for source set 'main' (deprecated, use 'implementation ' instead).
+--- org.grails:grails-dependencies:3.3.8
|    +--- org.springframework.boot:spring-boot-starter-logging:1.4.2.RELEASE -> 1.5.15.RELEASE
|    |    +--- ch.qos.logback:logback-classic:1.1.11
|    |    |    +--- ch.qos.logback:logback-core:1.1.11
...
+--- our-logger:9.99
|    +--- ch.qos.logback:logback-classic:1.2.3 -> 1.1.11 (*)

如何logback-1.2.3在所有服务中不明确声明的情况下强制执行?

标签: gradlegrails

解决方案


gradle docs 文件在 Advanced Dependency Management 下。您应该能够使用 excludes. 还有其他方法Gradle Docs

compile(“some:other:dependency”) {
    exclude group: 'ch.qos.logback', module: 'logback-classic'
}

推荐阅读