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