java.lang.NoClassDefFoundError: Could not initialize class XXX
2017-03-15 10:39
591 查看
场景:本地能跑通的程序,一放到服务器就报NoClassDefFoundError错误。查了相关资料,最终解决了这个问题,为了避免下次入坑,就写了这篇博客。
观察异常信息,基本就可以定位问题了。
这里罗列下可能出现的问题:
- 引入的jar包冲突
- 缺少依赖的jar包
- static块读取文件时路径错误/缺少文件/读取格式错误导致乱码/其他IO异常等,使得类加载不成功
- static块抛出其他异常
- static成员变量初始化抛出异常
- 其他
我们经常被java.lang.ClassNotFoundException和java.lang.NoClassDefFoundError这两个错误迷惑不清,尽管他们都与Java classpath有关,但是他们完全不同。NoClassDefFoundError发生在JVM在动态运行时,根据你提供的类名,在classpath中找到对应的类进行加载,但当它找不到这个类时,就发生了java.lang.NoClassDefFoundError的错误,而ClassNotFoundException是在编译的时候在classpath中找不到对应的类而发生的错误。ClassNotFoundException比NoClassDefFoundError容易解决,是因为在编译时我们就知道错误发生,并且完全是由于环境的问题导致。而如果你在J2EE的环境下工作,并且得到NoClassDefFoundError的异常,而且对应的错误的类是确实存在的,这说明这个类对于类加载器来说,可能是不可见的。
这篇博客有更为详细的分析和说明,以及NoClassDefFoundError的解决示例。
问题说明与解决
这个问题一般是因为运行时,JVM加载类的static块或初始化static成员变量(log日志等)时抛出异常,为了得到异常的详细信息,在static块里加入try-catch,输出异常信息:static { try{ doSomething... } catch (Exception e) { e.printStackTrace(); System.out.println(e.getCause() + " - "+ e.getMessage()); } }
观察异常信息,基本就可以定位问题了。
这里罗列下可能出现的问题:
- 引入的jar包冲突
- 缺少依赖的jar包
- static块读取文件时路径错误/缺少文件/读取格式错误导致乱码/其他IO异常等,使得类加载不成功
- static块抛出其他异常
- static成员变量初始化抛出异常
- 其他
NoClassDefFoundError和ClassNotFoundException区别
个人觉得弄清楚NoClassDefFoundError和ClassNotFoundException的概念是非常有必要的,于是就拷贝了博客:怎么解决java.lang.NoClassDefFoundError错误的部分内容,以下是原文:我们经常被java.lang.ClassNotFoundException和java.lang.NoClassDefFoundError这两个错误迷惑不清,尽管他们都与Java classpath有关,但是他们完全不同。NoClassDefFoundError发生在JVM在动态运行时,根据你提供的类名,在classpath中找到对应的类进行加载,但当它找不到这个类时,就发生了java.lang.NoClassDefFoundError的错误,而ClassNotFoundException是在编译的时候在classpath中找不到对应的类而发生的错误。ClassNotFoundException比NoClassDefFoundError容易解决,是因为在编译时我们就知道错误发生,并且完全是由于环境的问题导致。而如果你在J2EE的环境下工作,并且得到NoClassDefFoundError的异常,而且对应的错误的类是确实存在的,这说明这个类对于类加载器来说,可能是不可见的。
这篇博客有更为详细的分析和说明,以及NoClassDefFoundError的解决示例。
相关文章推荐
- java.lang.NoClassDefFoundError: Could not initialize class XXX
- java.lang.NoClassDefFoundError: Could not initialize class
- with root cause java.lang.NoClassDefFoundError:Could not initialize class com.AlipaySubmit
- java.lang.NoClassDefFoundError: Could not initialize class com.liv.util.Hibe
- with root cause java.lang.NoClassDefFoundError:Could not initialize class com.AlipaySubmit
- java.lang.NoClassDefFoundError: Could not initialize class net.sf.cglib.proxy.Enhancer
- Caused by: java.lang.NoClassDefFoundError: Could not initialize class
- with root cause java.lang.NoClassDefFoundError:Could not initialize class com.AlipaySubmit
- java.lang.NoClassDefFoundError: Could not initialize class com.mysql.jdbc.ConnectionImpl
- java.lang.NoClassDefFoundError: Could not initialize class org.jfree.chart.JFreeChart
- ssh类库:java.lang.NoClassDefFoundError: Could not initialize class net.sf.cglib.proxy.Enhancer
- with root cause java.lang.NoClassDefFoundError:Could not initialize class com.AlipaySubmit
- with root cause java.lang.NoClassDefFoundError:Could not initialize class com.AlipaySubmit
- with root cause java.lang.NoClassDefFoundError:Could not initialize class com.AlipaySubmit
- with root cause java.lang.NoClassDefFoundError:Could not initialize class com.AlipaySubmit
- java.lang.NoClassDefFoundError: Could not initialize class的场景
- java.lang.NoClassDefFoundError: Could not initialize class com.zzxgy.struts.model.HibernateUtil
- SSH 类库问题 java.lang.NoClassDefFoundError: Could not initialize class
- with root cause java.lang.NoClassDefFoundError:Could not initialize class com.AlipaySubmit
- java.lang.NoClassDefFoundError: Could not initialize class net.sf.json.util.JSONUtils