如题。本文旨在解决该错误。备注:SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder“
这样的错误已经有很多参考文章了,但是竟然没有一篇文章能够解决我遇到的问题,我研究了许久,才找到解决方案。因此在此记录,以期给遇到同样问题的读者提供一个可行方案。
SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder”.
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Exception in thread “main” java.lang.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder
dependencies {
compile 'org.apache.thrift:libthrift:0.9.1'
compile group: 'org.apache.commons', name: 'commons-lang3', version:'3.1'
compile group: 'com.google.guava', name: 'guava', version: '18.0'
compile group: 'joda-time', name: 'joda-time', version: '2.3'
compile group: 'log4j', name: 'log4j', version: '1.2.17'
compile group: 'commons-io', name: 'commons-io', version: '2.4'
testCompile group: 'junit', name: 'junit', version: '4.11'
}
网上的解决方案都不太顶用。我也做了非常多的尝试:
下面介绍解决方案。
首先,这样的错误报出来,问题肯定出在log4j和sl4j相关的包上。
但是我看build.gradle文件中只有一个依赖:
compile group: 'log4j', name: 'log4j', version: '1.2.17'
没有任何其他的sl4j包,这就奇怪了,难道是默认下载对应的sl4j依赖吗?
我又观察了一下Eclipse左侧的dependencies栏目,如图:
可以发现,这里竟然有一个slf4j-api-1.5.8版本的包!!!
我大概已经感觉到了问题原因可能在这个包太老旧了。需要换新版本。
1)先移除旧版本,右键项目->build path -> configure build path
即进入如下界面,移除这个旧版本的slf4j-api:
2)添加新版本:
先在build.gradle中添加依赖:
compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.26'
然后编译:./gradle build 或者./gradlew build
然后还要在Eclipse中手动导入这个依赖!!!(这一步不能忘,否则在Eclipse中还是回报错)
同样地,右键项目->build path -> configure build path
即进入如下界面,添加这个新版本的slf4j-api,如图:
同理,用同样的方法,还要在build.gradle加上一个额外的依赖:
compile group: 'org.slf4j', name: 'slf4j-log4j12', version: '1.7.26'
然后用gradle编译,然后也是在Eclipse中导入这个依赖。
最后的结果:
顺利运行,再无此错误。
这个问题本质上是需要添加两个额外依赖:
compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.26'
compile group: 'org.slf4j', name: 'slf4j-log4j12', version: '1.7.26'
但是过程曲折,还是一言难尽。
事情的转机在:我去搜索了org.slf4j.impl.StaticLoggerBinder
这个类到底在哪个版本的包里面,然后我发现好像在StaticLoggerBinder (SLF4J 1.8.0-alpha2 API)
这里,所以我把slf4j-api更新到了1.8.0-alpha2,然而还是报错,不过这次错误变了:SLF4J: No SLF4J providers were found.
然后我参考:(笔记)SLF4J: No SLF4J providers were found.解决方法,结合 https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12/1.7.26 这里说的slf4j-log4j12
的依赖项有log4j
和slf4j-api
,把依赖换成了1.7.26版本。
并且还加上了slf4j-log4j12,这时候错误就没有了。
可谓是误打误撞,歪打正着?
总之花了几个小时,所以在此记录一下。