替换jar的同名不同版本时出现奇怪的NoClassDefFoundError
来源:互联网 发布:龙的传人李青淘宝价格 编辑:程序博客网 时间:2024/05/20 20:19
今天遇到了一个奇怪的NoClassDefFoundError错误,在Eclipse下JRE环境与classLoader都没错的情况下,很纳闷怎么会出现一般由这2个问题导致的错误.下面贴出原代码:
public class MainTest {public static void main(String[] args) {Session session=null;Transaction tx=null;try {session=HibernateUtils.getSession();//begintx=session.beginTransaction();} catch (Exception e) {e.printStackTrace();tx.rollback();}finally{HibernateUtils.closeSession(session);}}}
错误信息是:
Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class com.yan.hibernate.HibernateUtils
at com.yan.test.MainTest.main(MainTest.java:55)
这样的日志信息是非常糟糕的,往往很难一目了然的定位到错误的根源,因为它屏蔽了这个类里面发生的错误.
调试方法
我把HibernateUtils单独放在一个JUnit的测试单元里,结果立刻看到问题的根源了.
java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
at org.hibernate.cfg.Configuration.<clinit>(Configuration.java:151)
at com.yan.hibernate.HibernateUtils.<clinit>(HibernateUtils.java:13)
at com.yan.test.MainTest.main(MainTest.java:20)
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
很明显,Jar包中依赖的类没有找到,但是由于我在原程序中没有catch Error类型,导致错误无法跟踪或断链.说到这个,我想起之前公司项目中有这样的一段代码,也是因为异常捕获到之后没有正确的处理而导致跟踪不到root cause.引以为鉴.
附带几篇异常处理的文章:
http://www.ibm.com/developerworks/cn/java/j-lo-exception/index.html
http://www.ibm.com/developerworks/cn/java/j-lo-exceptionframework/
- 替换jar的同名不同版本时出现奇怪的NoClassDefFoundError
- Java类加载机制——如何实现一个工程中不同模块加载不同版本的同名jar包。
- Java类加载机制——如何实现一个工程中不同模块加载不同版本的同名jar包。
- NoClassDefFoundError 的奇怪问题
- 版本更新时出现“已安装了存在签名相同的同名数据包”
- Android FragmentTransaction在不同版本下的奇怪问题
- oracle数据库编码不同而出现的奇怪问题
- 【异常】在hadoop集群上编译类jar包,因jdk版本不同出现的异常
- maven中jar不同版本的依赖
- Android导入自定义的jar包时出现 E/AndroidRuntime(486): java.lang.NoClassDefFoundError错误
- 让Tomcat启动时加载所有hbase的jar包,避免出现NoClassDefFoundError错误
- Android支持库版本不一致而出现的奇怪bug
- 同名文本框与同名复选框在传值上的不同.
- 使用不同版本jdk时出现的问题记录
- 多重继承(不同的父类中有同名函数)
- android 调试时 出现的奇怪问题
- struts配置数据源时,由于tomcat的版本不同而出现的标签属性名不同
- setEnvironment中的jar包的版本不同的冲突
- 从N[百万]个随机整数中查找出现频率最高的所有整数
- 中断触发流程三(中断控制器)
- iOS系统的沙盒机制
- oracle %TYPE 和 %ROWTYPE
- “沙盒机制”对iOS开发的软硬件影响
- 替换jar的同名不同版本时出现奇怪的NoClassDefFoundError
- 浅谈代理服务器的作用
- 基于rtsp的手机视频点播
- 回顾HTML5这一年:在痛并快乐中前进(2012)
- Linux常用命令查询
- 新兴Web技术杂谈 之 WebSocket
- ECSHOP订单信息页或ECSHOP打印页显示商品缩略图
- Tautology
- 回首JavaScript这一年:笑里藏刀 百媚丛生