發生NoClassDefFoundError的可能之一

錯誤簡述

不久前,在開發過程當中,將寫好的項目A編譯成jar包,放到其餘的項目上用的時候(直接引用,而不是使用依賴管理工具),出現以下的錯誤:java

錯誤的全稱:java.lang.NoClassDefFoundError,這是一個運行時錯誤,在編譯的時候並不發生。困擾了我好一下子。工具

解決方法

原來是原來是項目A編譯成的jar包所依賴的jar包不存在。添加就能夠了。spa

詳細一點

NoClassDefFoundError錯誤的發生,是由於Java虛擬機在編譯時能找到合適的類,而在運行時不能找到合適的類致使的錯誤。例如在運行時咱們想調用某個類的方法或者訪問這個類的靜態成員的時候,發現這個類不可用,此時Java虛擬機就會拋出NoClassDefFoundError錯誤。簡單總結就是,NoClassDefFoundError發生在編譯時對應的類可用,而運行時在Java的classpath路徑中,對應的類不可用致使的錯誤。.net

發生錯誤可能的緣由以下:日誌

  1. 對應的Class在java的classpath中不可用
  2. 你可能用jar命令運行你的程序,但類並無在jar文件的manifest文件中的classpath屬性中定義
  3. 可能程序的啓動腳本覆蓋了原來的classpath環境變量
  4. 由於NoClassDefFoundError是java.lang.LinkageError的一個子類,因此可能因爲程序依賴的原生的類庫不可用而致使
  5. 檢查日誌文件中是否有java.lang.ExceptionInInitializerError這樣的錯誤,NoClassDefFoundError有多是因爲靜態初始化失敗致使的
  6. 若是你工做在J2EE的環境,有多個不一樣的類加載器,也可能致使NoClassDefFoundError

若是想了解更多關於NoClassDefFoundError的發生機制和解決方法,能夠參考下面這篇blog:blog

http://blog.csdn.net/angel_g/article/details/54235701開發

本篇blog的部份內容也是來自於這篇blog, 特在此聲明。get

end虛擬機

相關文章
相關標籤/搜索