java.lang.NoClassDefFoundError: Could not initialize class xxx

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

概述:本來是調用公司本身寫的jar包的工具類。在其餘項目都能調用,如出一轍的套用過來就是不行。問了一些同事他們也不知道怎麼解決。spring

   而後百度上網查資料,網上大多數都是說jar包衝突,或者讀不到配置文件,靜態方法什麼的。由於這是公司內部寫的工具jar包,應該不會存在衝突的。我仍是springboot

   檢查了jar包,由於我另一個項目調這個方法是沒問題的。因此我把j整個項目的jar包幾乎改爲和另一個項目同樣的。仍是沒用(中途包括網上查的先降級在升級jar什麼的,都試過)。工具

   

   項目重啓,各類clean install 從新編譯仍是沒用。真的是奇了怪了。spa

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

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

   由於我另一個項目同樣的用法是沒有問題的,因此我幾乎對比了這個兩個項目的全部不一樣點。能保持同樣的都保持同樣了。it

   其中有個問題,咱們的項目都是springboot,在啓動類那裏,編譯

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

//報錯的項目
@ComponentScan

開始的時候知道這裏不一樣,可是每太注意,由於class

@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因此,最終問題確實是歸結到 靜態代碼塊讀不到 配置文件的內容!!!!
相關文章
相關標籤/搜索