m0_37320995
m0_37320995
采纳率0%
2018-11-28 16:28 阅读 8.2k

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

40

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

        是怎么回事,是打包时要注意什么吗,我用eclipse打的
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

4条回答 默认 最新

  • davidsu1973 davidsu1973 2018-11-28 16:56

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

    点赞 评论 复制链接分享
  • ainiburuqusi ainiburuqusi 2018-11-29 00:36

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

    点赞 评论 复制链接分享
  • zhongsan123 才沐木 2018-11-29 03:33

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

    点赞 评论 复制链接分享
  • WSKinght 夏天吹过的风 2018-11-30 03:48

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

    点赞 评论 复制链接分享

相关推荐