java.lang.NoClassDefFoundError

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章