【問題解決】-《java.lang.NoClassDefFoundException》


  此問題相比與ClassNotFoundException,不容易找到,當然這兩者都屬於jvm加載類時的錯誤。導致

NoClassDefFoundException的原因:編譯時不報錯,運行時在內存中找不到該類的對象。也正是這個原因,導

致不好找到,深層次的原因我們得分析jvm加載機制,這個我會在下篇文章中發表個人愚見,這里我們就描述一

些我們實際開發中,由於我們的哪些疏忽導致此問題出現。看到網上好多出現此類問題,如:靜態變量初始化找

不到指定文件;代碼順序問題,但我這邊寫了測試類均沒有復現,所以此處不做說明,等遇到后再更新文檔。

  場景:我們明明下載了三方jar,然后加入到構建路徑,然后重新編譯后,也不報錯。但為何運行的時候,

就是提示NoClassDefFoundException這個錯誤。其根本原因就是:引入的jar包沒有在當前jar文件的

manifest文件中的classpath屬性中定義!!!

add by weipt 20190713 還有一種情況就是,當前引入的包,沒有在Import_Pachage標簽下注冊

  這個根據我們實際框架來看,就拿OSGI舉例:其MANIFEST.MF文件中Bundle-ClassPath屬性,需要我們

引入三方jar包后,在此文件中添加,有的ide會自動添加。沒有的話我們就需要手動添加。

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Weipt_TEST
Bundle-SymbolicName: Weipt_TEST;singleton:=true
Bundle-Version: 1.0.0.qualifier
Bundle-ClassPath: .,
 lib/dom4j-1.6.1.jar,
 lib/org.jdom_1.0.0.v200806100616.jar,
 lib/jsch-0.1.55.jar
Bundle-Activator: com.dcfs.queue.app.Activator
Junit-Test: com.dcfs.teller.common.test.MainTest
Bundle-RequiredExecutionEnvironment: JavaSE-1.6

  歡迎指正或者補充,您的建議是我們共同進步的階梯


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM