Web工程,部署在linux系统weblogic目录下, 所有jar包都在lib目录下,新打了个jar包,这个jar包里面的一个类引用了另一个jar包里面的类
,然后运行时jvm却找不到这个类,NoClassDefFoundError,但这个类明明在jar包里面存在
是怎么回事,是打包时要注意什么吗,我用eclipse打的
Web工程,部署在linux系统weblogic目录下, 所有jar包都在lib目录下,新打了个jar包,这个jar包里面的一个类引用了另一个jar包里面的类
,然后运行时jvm却找不到这个类,NoClassDefFoundError,但这个类明明在jar包里面存在
是怎么回事,是打包时要注意什么吗,我用eclipse打的
出现NoClassDefFoundError错误,应该是jvm在编译时能找到引用的类,而在运行时找不到引用的类导致的错误。就是说在编译时对应的类可用,而运行时在Java的classpath路径中,对应的类不可用导致错误。
检查下有没把对应的类加载到classpath中,或者检查为什么类在classpath中是不可用的;
类并没有在jar文件的manifest文件中的classpath属性中定义;
可能程序的启动脚本覆盖了原来的classpath环境变量;
因为NoClassDefFoundError是java.lang.LinkageError的一个子类,所以可能由于程序依赖的原生的类库不可用而导致;
检查日志文件中是否有java.lang.ExceptionInInitializerError这样的错误,NoClassDefFoundError有可能是由于静态初始化失败导致的;
环境中有多个不同的类加载器,也可能导致NoClassDefFoundError;
诊断方法:
在程序中打印出System.getproperty(“java.classpath”),可以得到程序实际运行的classpath;
运行时明确指定你认为程序能正常运行的 -classpath 参数,如果增加之后程序能正常运行,说明原来程序的classpath被其他程序修改覆盖了。