java.lang.NoClassDefFoundError的解决

前言

写了一个java程序,初期运行正常,在一次功能新增的时候,出现异常,百思不得其解。最终解决后,记录下。

环境

我的程序是jar运行的。
开发工具是 idea
开发环境 mac
运行环境 centos7

问题

运行程序

java -jar   wwf.jar

异常如下:

Exception in thread "main" java.lang.NoClassDefFoundError: com/alibaba/fastjson/JSON

Caused by: java.lang.ClassNotFoundException: com.alibaba.fastjson.JSON
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

过程

  • 一开始以为 fastjson-1.2.7.jar 还依赖其他的包。检查了一遍,中间还替换了其他的json包方案。依旧无法解决

  • 判断fastjson-1.2.7.jar包没加载。检查pom.xml 和检查运行的文件夹
    发现fastjson-1.2.7.jar均存在。

  • 尝试拷贝fastjson-1.2.7.jar 到java环境变量的classpath目录下。尝试解决。依旧不行。

  • 尝试 java -Djava.ext.dirs=xxx路径 wwf.jar 可以运行。但是存在瑕疵。xxx路径中jar包如果有main方法会被优先执行。

  • 最后的解决方法。修改 MANIFEST.MF 文件Class-Path 追加上 fastjson-1.2.7.jar

问题的根本原因是

MANIFEST.MF 是第一次项目创建时候设置的。后期如果引入新的依赖包,需要手动修改,
idea工具无法自动修改。

这个问题也反应自己对程序执行的基本流程不熟悉。

你可能感兴趣的:(java.lang.NoClassDefFoundError的解决)