使用dom4j时遇到了NoClassDefError

来源:互联网 发布:为什么445端口关不掉 编辑:程序博客网 时间:2024/05/21 07:59

在使用dom4j技术解析xml文档的时候,遇到了java.lang.NoClassDefError错误,错误提示信息为:java.lang.NoClassDefError: org/jaxen/JaxenException,通过查询项目内的jar包也没有找到所描述的类,所以判断应该是缺少jar包导致。

通过查询了解到是确实是缺少dom4j所依赖的jar包,通过下载和导入该包之后错误消失。下载地址

在解决该问题的过程中,对java.lang.NoClassDefError有了进一步的了解,现记录如下:

NoClassDefError发生的原因是因为java虚拟机在编译时找到了合适的类,但是运行时却不能找到合适的类,此时便会发生此错误。(这里有个问题,我没有下载缺失jar包的情况下,编译是如何通过的呢?)

这个错误与ClassNotFoundException的区别在于:后者发生在编译时,classpath下找不到类名对应的类导致;而前者是在编译通过,但是动态运行时找不到对应的类时发生。如果发生该错误时,对应的类确实存在,说明该类对于类加载器来说,可能是不可见的。

在该错误发生时,首先应该检查自己的jar包是否完整,若缺少则下载相应的jar包;若该类确实存在,我们需要把该类加载到classpath下来,或者检查为什么它是不可见的

可能原因如下:

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

原创粉丝点击