为什么打的jar包,引用的其它jar包里面的类运行时找不到报NoClassDefFoundError? 40C

Web工程,部署在linux系统weblogic目录下, 所有jar包都在lib目录下,新打了个jar包,这个jar包里面的一个类引用了另一个jar包里面的类
,然后运行时jvm却找不到这个类,NoClassDefFoundError,但这个类明明在jar包里面存在

        是怎么回事,是打包时要注意什么吗,我用eclipse打的

4个回答

出现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被其他程序修改覆盖了。

通常这种错误都是jar包冲突引起的,weblogic经常发生这种问题,解决有三,1,在项目WEB-INF目录下配置weblogic.xml,优先引用本项目的jar包;2,在weblogic的models目录下找到与项目本身冲突的jar包,比较版本并替换。第三种是放到domain域下边的一个目录里,好像是lib还是bin来着,我也记不清了,你可以先试试前两种。

是不是jar包冲突了或者类名取得一样了导致的,比如weblogic服务器里面本身的lib包目录下与你打的jar包有冲突的地方

看日志,有可能是这个类加载失败了,也可能是有重名冲突了。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问