java.lang.NoClassDefFoundError異常原因分析和解決方案

問題:

     項目在本地沒有報錯,在服務器部署的時候報java.lang.NoClassDefFoundError異常。

     發生此問題的時候,在本地的開發工具也會有此異常的警告(開發工具沒有關閉警告提示)。     


原因:

       1.JVM編譯時能找到合適的類,運行時不能找到導致錯誤。例如運行時調用某個類的方法或者訪問這個類的靜態成員的時,發現這個類不可用,此時Java虛擬機就會拋出NoClassDefFoundError錯誤。

       與ClassNotFoundException的不同在於:此錯誤發生在運行時需要加載對應的類不成功,而不是編譯時發生。很多Java開發者很容易在這裏把這兩個錯誤搞混。

      總結:NoClassDefFoundError發生在編譯時對應的類可用,而運行時在Java的classpath路徑中,對應的類不可用導致的錯誤

解決方案:

 

      1.maven項目:檢查項目中的jar包是否和編譯時的jar包一樣(版本是否一致),下載相關jar包。

      2.非maven項目:檢查項目中的jar包是否和編譯時的jar包一樣(版本是否一致),非maven項目的jar不會自動下載,需手動下載;若存在多個項目之間互相調用時,確保每個項目中都有相關的jar包,尤其是在不使用maven控制的微服務項目中常發生。
         

相關知識點:

      1.JVM加載;

      2.maven,微服務;

 

發佈了20 篇原創文章 · 獲贊 5 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章