1. 程式人生 > >maven依賴衝突解決方案

maven依賴衝突解決方案

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包的版本。