Eclipse项目运行时classpath下的slf4j未被加载 报LoggerFactory类不存在错误
slf4j引入ClassNotFoundException问题排查
我在项目中引入slf4j一直未成功,已经将slf4j-api-1.7.32.jar和slf4j-jdk14-1.7.32.jar添加到了classpath中,但无论怎么尝试都会抛出java.lang.ClassNotFoundException: org.slf4j.LoggerFactory错误。
报错的起始部分如下:
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory at java.net.URLClassLoader.findClass(URLClassLoader.java:382) at com.google.gwt.dev.shell.jetty.JettyLauncher$WebAppContextWithReload$WebAppClassLoaderExtension.findClass(JettyLauncher.java:354) at org.mortbay.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:366) at org.mortbay.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:337) ...
(如果需要我可以提供更多报错信息,但编译器截断了后续内容)
该项目基于Eclipse开发,我已经尝试过以下操作:
- 将依赖库放在classpath最前面
- 将依赖库放在classpath最后面
- 重启Eclipse
- 重新构建项目
- 更换slf4j版本
以上操作都没有解决问题。
但奇怪的是,使用完全相同的依赖库,我编写的JUnit测试可以正常运行。
今天早上同事发现将这两个slf4j依赖库添加到war/WEB-INF/lib目录下可以解决问题,但这不是可行的长期解决方案。
最新进展
我已经有了新的排查进展,将以下配置添加到jetty-web.xml中即可解决该问题:
<Set name="systemClasses"> <Array type="java.lang.String"> <!-- we from jetty WebAppContext source code ...--> <Item>java.</Item> <Item>javax.servlet.</Item> <Item>javax.xml.</Item> <Item>org.mortbay.</Item> <Item>org.xml.</Item> <Item>org.w3c.</Item> <Item>org.apache.commons.logging.</Item> <Item>org.apache.log4j.</Item> <!-- and ... added slf4j --> <Item>org.slf4j.</Item> </Array> </Set>
目前我还需要调整部署脚本的相关配置,欢迎大家补充更多解决方案。
内容的提问来源于stack exchange,提问作者BespokeChaplain
相关产品推荐
相关产品推荐

