感慨:啊啊啊啊啊啊啊啊啊啊,這個問題弄了我很久,整整一天!!!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因此,最終問題確實是歸結到 靜態代碼塊讀不到 配置文件的內容!!!!