java.lang.NoClassDefFoundError: Could not initialize class xxx


感慨:啊啊啊啊啊啊啊啊啊啊,這個問題弄了我好久,整整一天!!!

概述:原本是調用公司自己寫的jar包的工具類。在其他項目都能調用,一模一樣的套用過來就是不行。問了一些同事他們也不知道怎么解決。

   然后百度上網查資料,網上大多數都是說jar包沖突,或者讀不到配置文件,靜態方法什么的。因為這是公司內部寫的工具jar包,應該不會存在沖突的。我還是

   檢查了jar包,因為我另外一個項目調這個方法是沒問題的。所以我把j整個項目的jar包幾乎改成和另外一個項目一樣的。還是沒用(中途包括網上查的先降級在升級jar什么的,都試過)。

   

   項目重啟,各種clean install 重新編譯還是沒用。真的是奇了怪了。

   網上說讀不到配置文件。我看了我那個工具類,他雖然是有配置文件,但是也是配置在他jar包里面的,無需我配置啊。再說了我另外一個可以運行的項目也沒配置其他的。百思不得其解。

   在已經放棄的邊緣,我想說,實在不行換種方式實現吧!

   因為我另外一個項目一樣的用法是沒有問題的,所以我幾乎對比了這個兩個項目的所有不同點。能保持一樣的都保持一樣了。

   其中有個問題,我們的項目都是springboot,在啟動類那里,

//原本沒問題的項目
@ComponentScan("aaa.bbb.ccc")

//報錯的項目
@ComponentScan

開始的時候知道這里不同,但是每太注意,因為

@ComponentScan的作用是掃描其包所在的位置下面的所有包
@ComponentScan("aaa.bbb.ccc")的作用是掃描指定路徑下的所有包

然后感覺也沒問題,就沒太注意。
但是,當你很絕望的時候,什么都要去試一下的。
然后我把這里也改成了一樣。就可以了!!!!

最后就知道為什么了

原因就是
我們公司的默認路徑都是
aaa.bbb.ccc.項目名(ddd).啟動類(App.java)

@ComponentScan沒配置掃描路徑的時候,就是掃描 aaa.bbb.ccc.項目名(ddd) 下的包
@ComponentScan("aaa.bbb.ccc")確實掃描的 aa.bbb.ccc 下的包,沒有 項目名(ddd)這一層

而我調用的公用工具包是公司自己寫的,都是以公司的名稱命名的,所以那些配置文件都是放到 aaa.bbb.ccc 下的
沒有項目名(ddd)。@ComponentScan不指定路徑的話,是掃描不到工具jar包里面的類的(掃描不到類,意味着他們的注解是不可以用的),就會導致他們讀不到配置文件,
所以在調用靜態方法的時候,就會報 java.lang.NoClassDefFoundError: Could not initialize class xxx

所以,最終問題確實是歸結到 靜態代碼塊讀不到 配置文件的內容!!!!




 


免責聲明!

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



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