一.maven傳遞依賴
1.舉個例子:A-->B,則B是A的直接依賴,若B-->C,則C是A的傳遞依賴,C-->D,D也是A的傳遞依賴,依次類推
2.在我們導入依賴時,maven會把我們導入包的直接依賴和傳遞依賴都導進來,這時候大家有沒有思考過一個問題?假設A-->B,A-->C,B-->C,這種情況下maven會導幾個C進來?沒錯是一個,我們希望也是一個,不然如果需要導入的依賴越多,包之間的依賴關系越復雜,重復的包也就更多,還好沒出現這個問題
3.雖然沒出現包重復的問題,不過傳遞依賴是真出現一個問題,即版本沖突;舉個例子:A1-->B1,A1-->C1,B1-->C2,最終會導致C1這個較低版本的被引入,而C2較高版本的不會再引入了,B1被迫使用C1這個較低版本的C;OK,既然問題已經出現了,接着講解決辦法
二.依賴沖突版本解決
1.調節原則(分為路徑近者優先原則和第一聲明者優先原則)
(1)路徑近者優先原則
說下該原則曬意思?還是剛才的例子:A1-->B1,A1-->C1,B1-->C2,從這個依賴關系,我們說A1依賴C1比C2更近,即路徑更近,所以C1優先被依賴引入,現在圖片來說下:
現在我們根據近者優先原則,我們就直接依賴spring-beans 4.2.4,如圖:
小結:不建議大量使用該原則,如果jar一多,需要考慮的路徑關系就變得十分復雜
(2)第一聲明者優先原則
這個很簡單,在pom.xml中誰放在前面,誰優先!,如圖:
小結:也不建議大量使用,jar一多,排序關系就錯綜復雜了
2.排除原則
(1)在pom.xml添加依賴中聲明不需要哪個jar,如圖所示:
小結:還是不建議,同樣jar一多,得排除很多無用的jar
3.鎖定版本(建議使用)
1.直接在pom.xml聲明用哪個jar的哪個版本,如果遇到該jar的其他版本則不引入,如圖:
2.這樣的話還是有個小毛病,如果出現鎖定的不同jar有很多相同版本的,有一天我們想要改統一換版本就要一個一個去改很麻煩,所以打算把版本進行一個抽取,如圖: