今天遇到了一个奇怪的NoClassDefFoundError错误,在Eclipse下JRE环境与classLoader都没错的情况下,很纳闷怎么会出现一般由这2个问题导致的错误.下面贴出原代码:
public class MainTest {
public static void main(String[] args) {
Session session=null;
Transaction tx=null;
try {
session=HibernateUtils.getSession();
//begin
tx=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