从gradle中几个冲突的可传递依赖项中强制执行最高版本

从gradle中几个冲突的可传递依赖项中强制执行最高版本,gradle,grails,Gradle,Grails,我在一个拥有多种服务和库的大型项目中工作,主要是在grails中,在gradle中。出于安全原因,我正在尝试更新库(比如logback) 我已经在我们的一个库中更新了它(比如说我们的logger),如下所示: #our-logger/build.gradle ... dependencies { ... compile 'ch.qos.logback:logback-classic:1.2.3' ... } 当我更新一个服务(比如说我们的服务)以使用新版本的我们的记录器

我在一个拥有多种服务和库的大型项目中工作,主要是在grails中,在gradle中。出于安全原因,我正在尝试更新库(比如
logback

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

#our-logger/build.gradle
...
dependencies {
    ...
    compile 'ch.qos.logback:logback-classic:1.2.3'
    ...
}
当我更新一个服务(比如说
我们的服务
)以使用新版本的
我们的记录器
时,我从其他库中获取了日志,gradle通过
cobertura
和一些其他依赖项选择了较低的版本,而不是更高版本通过
我们的记录器

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

如何在不在所有服务中明确声明的情况下实施
logback-1.2.3
。您应该能够使用
排除
来实现您的目标。还有其他方法


```编译('org.springframework.boot:springbootstarterlogging:1.5.18.RELEASE'){exclude group:'ch.qos.logback',module:'logback classic'}``没有帮助。现在版本1.1.11显然不知从何而来,但仍然覆盖了我的版本…您可以尝试将您想要的日志命名为此项目中的实现依赖项。链接中还讨论了这一点,作为在发生冲突时选择版本的一种方法<代码>实现('ch.qos.logback:logback classic: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 (*)
compile(“some:other:dependency”) {
    exclude group: 'ch.qos.logback', module: 'logback-classic'
}