前言
写了一个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工具无法自动修改。
这个问题也反应自己对程序执行的基本流程不熟悉。
网友评论