maven依賴衝突解決方案
阿新 • • 發佈:2018-11-19
1. 傳遞依賴
1.1 什麼是傳遞依賴
如果A依賴於B,B依賴於C,則稱B是A的直接依賴,C是A的傳遞依賴
1.2 傳遞依賴衝突
如A依賴於B,B依賴於C(1.1版本),同時A依賴於D,D也依賴於C(2.1版本)。那麼此時A可能傳遞依賴C的1.1版本,也可能傳遞依賴C的2.1版本。造成衝突。
1.3 傳遞依賴的解決
1.3.1 第一宣告者優先原則
誰先宣告(即<dependency>配置的先後順序中先配置的),就用誰的傳遞依賴。
舉例:如果我們的A專案中依賴了B的jar包,B依賴了C的1.1版本。同時我們的A專案依賴了D的jar包,D依賴了C的2.1版本。則如果在配置檔案中我們先配置了依賴B,則A專案會傳遞依賴C的1.1版本。
1.3.2 路徑近者優先原則
直接依賴 高於 傳遞依賴
舉例:如果我們的A專案中依賴了B的jar包,B依賴了C的1.1版本。同時,我們直接A專案中依賴C的2.1版本。則A專案最終會依賴C的2.1版本。(因為C的2.1版本是A的直接依賴,級別要高於1.1版本相對於A的傳遞依賴)
注:以上兩種原則為maven的自己調節原則
1.3.3 排除依賴
將不需要依賴的傳遞依賴排除掉
在<dependency>標籤中新增子標籤<exclusions>和<exclusion>將某傳遞依賴的jar包排除掉
1.3.4 版本鎖定(推薦使用)
直接指定所依賴的jar包版本。
使用<dependencyManagement>標籤,在改標籤中明確指定所依賴的jar包的版本。