maven-傳遞依賴和依賴沖突版本解決


一.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有很多相同版本的,有一天我們想要改統一換版本就要一個一個去改很麻煩,所以打算把版本進行一個抽取,如圖:


免責聲明!

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



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