发生NoClassDefFoundError的可能之一

错误简述

不久前,在开发过程当中,将写好的项目A编译成jar包,放到其余的项目上用的时候(直接引用,而不是使用依赖管理工具),出现以下的错误:java

错误的全称:java.lang.NoClassDefFoundError,这是一个运行时错误,在编译的时候并不发生。困扰了我好一下子。工具

解决方法

原来是原来是项目A编译成的jar包所依赖的jar包不存在。添加就能够了。spa

详细一点

NoClassDefFoundError错误的发生,是由于Java虚拟机在编译时能找到合适的类,而在运行时不能找到合适的类致使的错误。例如在运行时咱们想调用某个类的方法或者访问这个类的静态成员的时候,发现这个类不可用,此时Java虚拟机就会抛出NoClassDefFoundError错误。简单总结就是,NoClassDefFoundError发生在编译时对应的类可用,而运行时在Java的classpath路径中,对应的类不可用致使的错误。.net

发生错误可能的缘由以下:日志

  1. 对应的Class在java的classpath中不可用
  2. 你可能用jar命令运行你的程序,但类并无在jar文件的manifest文件中的classpath属性中定义
  3. 可能程序的启动脚本覆盖了原来的classpath环境变量
  4. 由于NoClassDefFoundError是java.lang.LinkageError的一个子类,因此可能因为程序依赖的原生的类库不可用而致使
  5. 检查日志文件中是否有java.lang.ExceptionInInitializerError这样的错误,NoClassDefFoundError有多是因为静态初始化失败致使的
  6. 若是你工做在J2EE的环境,有多个不一样的类加载器,也可能致使NoClassDefFoundError

若是想了解更多关于NoClassDefFoundError的发生机制和解决方法,能够参考下面这篇blog:blog

http://blog.csdn.net/angel_g/article/details/54235701开发

本篇blog的部份内容也是来自于这篇blog, 特在此声明。get

end虚拟机

相关文章
相关标签/搜索