問題:
項目在本地沒有報錯,在服務器部署的時候報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,微服務;