maven 工具的依賴樹以及解決版本包衝突問題
1、如何檢視一個工程的依賴樹 ?
maven工具牛B的地方在於包的依賴匯入。如果需要新增一個第三方包,只要在pom檔案中jar的依賴就可以。在工程的左側目錄中除了External Lib包下存在很多jar包,這些jar包有直接依賴的包,也有間接依賴的包。間接依賴就是指,假設依賴了spring-boot-starter-data-redis 這包,但是會出現其他的包,因為這個包也需要依賴其他的包。在上述包中也存在pom檔案。其他的包,都被稱為間接依賴。所以在maven中依賴之間不是單一的,是錯綜複雜的,猶如樹狀結構。所以稱為依賴樹。直接點選右側檢視,選中某個module,右鍵 show dependencies 會出現如下圖所示的情況:
從圖片中可以看出,包的父包是哪些,子包又有哪些。箭頭直達的是直接依賴,其他是間接依賴。
解決衝突
在依賴樹種可以如果存在依賴包的版本衝突(同一個jar包存在多個版本), 會出現紅線部分。 提示存在衝突,然後右鍵選中某個包,可以直接對其他進行exclusion排除依賴操作 。
2、一個程式在編譯的時候不會出現錯誤。但是在執行的時候確丟擲異常:
java.lang.ClassNotFoundException
為什麼會出現這個異常,應該怎麼解決這個異常 ?
出現場景:
假設兩個包A和B,都依賴第三方包C,但是依賴的版本不一致。其中A依賴的是Version1, B依賴的是Version2。 Version2是高版本。其中B中呼叫了版本2中的某個類。這個類在版本1中不存在。 編譯的時候,沒有異常。執行的時候,載入了版本1的包,不載入版本2的包,所以會出現ClassNotFoundException 。
解決思路:
1、首先檢視依賴樹,確定jar’包是否存在。如果存在。那麼就排除沒有jar的情況。
2、再通過依賴樹檢視是否存在jar包的版本衝突。 如果有衝突,那麼就排除低版本。(因為一般jar包的版本升級都會向下相容),所以直接exclusion低版本的jar包。