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工具無法自動修改。