【发布时间】:2017-06-08 12:28:42
【问题描述】:
试图解决 Gradle 上臭名昭著的 SLF4J 多绑定问题。这里有大约 100 万个 Maven 解决方案,但没有一个可以翻译成 Gradle(显然不是 Gradle 专家)。我尝试了一些涉及configurations 的解决方案,但没有一个能正常工作。这是我遇到的错误(正如我提到的,我正在尝试抑制警告)
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:~/.gradle/caches/modules-2/files-2.1/org.slf4j/slf4j-nop/1.7.22/3a4392836f875995446373b008e39cdb9a532fbe/slf4j-nop-1.7.22.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:~/.gradle/caches/modules-2/files-2.1/org.apache.logging.log4j/log4j-slf4j-impl/2.7/382b070836b8940a02d28c936974db95e9bfc3a4/log4j-slf4j-impl-2.7.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.helpers.NOPLoggerFactory]
这是我项目中唯一的 SLF4J 依赖:
dependencies {
compile group: 'org.slf4j', name: 'slf4j-nop', version: '1.7.+'
...
}
另外,如果有帮助,我在运行单元测试时会遇到问题。
更新:发现其中一个依赖项是使用 org.apache.logging,而后者又使用 SLF4J。如果我排除 apache 记录器的组,则整个程序将失败,因为该依赖项会引发 ClassNotFoundException。那么现在呢?
【问题讨论】:
-
除了 SLF4J 之外,Gradle 还包括哪些其他依赖项?
-
一长串,尽管没有一个是 SLF4J 或 LOG4J,至少直接如此。显然其中一个或多个拥有它。
-
你试过
runtime.exclude group,如this answer所示? -
现在可以试试了,我在配置中做了很多排除的变体,但似乎没有任何作用。奇怪的是,我已经删除了所有内容,并且日志记录自行关闭。
-
是的,它不再记录任何内容。不确定我应该如何处理这个问题,但我的 Gradle 文件没有其他更改,它刚刚停止:/