我收到错误
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/C:/Users/george/.gradle/caches/artifacts-26/filestore/org.apache.logging.log4j/log4j-slf4j-impl/2.0-beta8/jar/15984318e95b9b0394e979e413a4a14f322401c1/log4j-slf4j-impl-2.0-beta8.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/Users/george/.gradle/caches/artifacts-26/filestore/org.slf4j/slf4j-log4j12/1.5.0/jar/aad1074d37a63f19fafedd272dc7830f0f41a977/slf4j-log4j12-1.5.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
在我的build.gradle文件中,我有以下行包含jar log4j-slf4j-impl-2.0-beta8.jar(我想绑定到LOG4J2)
compile 'org.apache.logging.log4j:log4j-slf4j-impl:2.0-beta8'
在依赖项目中的另一个build.gradle文件中,我有多行类似于以下内容:
compile 'dcm4che:dcm4che-core:2.0.23'
现在dcm4che包含对log4j版本1(slf4j-log4j12)的依赖,因此它包含在整个项目中。
以下是Gradle依赖关系树的片段:
| +--- dcm4che:dcm4che-core:2.0.23
| | \--- org.slf4j:slf4j-log4j12:1.5.0
| | +--- org.slf4j:slf4j-api:1.5.0 -> 1.7.5
| | \--- log4j:log4j:1.2.13 -> 1.2.14
我已阅读链接suggested in the warning但我无法弄清楚如何使用我想要的jar将我的应用绑定到log4j2。 关于依赖管理的Gradle文档并没有真正使它更清楚。
答案 0 :(得分:17)
将此代码放入build.gradle
文件
configurations.all {
exclude group: 'org.slf4j', module: 'slf4j-log4j12'
}
答案 1 :(得分:14)
解决方案是在build.gradle中添加以下内容。
configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
if (details.requested.name == 'log4j') {
details.useTarget "org.slf4j:log4j-over-slf4j:1.7.5"
}
}
结果是通常需要log4j的任何东西都会使用log4j-over-slf4j。
我还补充说:
if (details.requested.name == 'commons-logging') {
details.useTarget "org.slf4j:jcl-over-slf4j:1.7.5"
}
完整性以涵盖公共记录。
答案 2 :(得分:5)
排除包含您不想要使用的slf4j .jar的依赖项。对于gradle this可能会有所帮助。
更新
不幸的是,我不熟悉gradle,但从链接的文档判断......像
compile('dcm4che:dcm4che-core:2.0.23') {
exclude group: 'org.slf4j'
}
可能有效吗?请注意,该文档提到了一种“全局配置”的配置。排除列表,这可能是更好的方法,但我没有找到更多相关信息。