java.lang.NoClassDefFoundError: org/apache/log4j/Level解决方法记录

问题描述:

一个SSM的web项目,在使用Spring集成Junit测试时,报错没有找到:org/apache/log4j/Level这个类

Failed to instantiate SLF4J LoggerFactory
Reported exception:
java.lang.NoClassDefFoundError: org/apache/log4j/Level
	at org.slf4j.LoggerFactory.bind(LoggerFactory.java:129)
	at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:108)
	at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:302)
	at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:276)
	at org.apache.commons.logging.LogFactory$Slf4jDelegate.createLocationAwareLog(LogFactory.java:174)
	at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:111)
	at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:99)
	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.<clinit>(SpringJUnit4ClassRunner.java:99)
        ... 省略 ....
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Level
		... 省略 ....

原因分析:

NoClassDefFoundError

​   已定义的类没有找到,这个错误表示在依赖中定义有这个类,在编译时可以通过,但是在运行时却找不到,平常很常见的一个错误是ClassNotFoundException,意思是类没有找到,它是在编译的时候报错。

​   两者之间的区别在于NoClassDefFoundError在编译时是可以找到这个类的,运行时却发现这个类不能用,而ClassNotFoundException是在编译的时候在classpath中找不到对应的类而发生的错误。


解决方案:

例如:我遇到的在用Spring集成Junit测试启动时,报出org.apache.log4j.Level这个类找不到,但是web应用在tomcat上能正常启动。

​ 我找到对应类所在的log4j1.2.17这个依赖,发现存在org.apache.logj4j.Level这类,双击进去发现是空白的,对比之下,点击其他正常的编译后的.class文件是可以看到里面的具体代码。接着我找到了这个Level.class的java源代码文件也是可以打开的。
​ 到这一步,我觉得可以可能log4j1.2.17这个包不完整,于是找到mavan本地仓库中的log4j1.2.17所在位置,将这个版本的包删干净,然后在项目中重新导入maven依赖,问题解决。

问题解决后,Level.class可以查看
重新下载的log4j1.2.17
​ 这个问题原因之一就是jar包不完整,或者依赖冲突,在此记录解决方式。

推荐另一篇博客https://blog.csdn.net/jamesjxin/article/details/46606307

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值