06 maven的依賴管理,jar包衝突解決

 

依賴是maven最爲用戶熟知的特性之一,單個項目的依賴管理並不難,但是要管理幾個或者幾十個模塊的時,那這個依賴應該怎麼管理

  •  

    依賴的傳遞性

    •  

       

    • A 依賴 B,B 依賴 C,A 能否使用 C 呢?那要看 B 依賴 C 的範圍是不是 compile,如果是則可用,否則不可用

  •  

    依賴的作用範圍

    •  

      compile

      •  

        這是默認範圍,編譯依賴對項目所有的classpath都可用。此外,編譯依賴會傳遞到依賴的項目

    •  

      provided

      •  

        表示該依賴項將由JDK或者運行容器在運行時提供,也就是說由Maven提供的該依賴項我們只有在編譯和測試時纔會用到,而在運行時將由JDK或者運行容器提供。

    •  

      runtime

      •  

        表明編譯時不需要依賴,而只在運行時依賴

    •  

      test

      •  

        只在編譯測試代碼和運行測試的時候需要,應用的正常運行不需要此類依賴。

    •  

      system

      •  

        系統範圍與provided類似,不過你必須顯式指定一個本地系統路徑的JAR,此類依賴應該一直有效,Maven也不會去倉庫中尋找它。

        <project>

        ...

        <dependencies>

        <dependency>

        <groupId>sun.jdk</groupId>

        <artifactId>tools</artifactId>

        <version>1.5.0</version>

        <scope>system</scope>

        <systemPath>${java.home}/../lib/tools.jar</systemPath>

        </dependency>

        </dependencies>

        ...

        </project>

    •  

      import

      •  

        範圍只適用於<dependencyManagement>部分。表明指定的POM必須使用<dependencyManagement>部分的依賴。因爲依賴已經被替換,所以使用import範圍的依賴並不影響依賴傳遞。

  •  

    依賴的兩大原則

    •  

  •  

    依賴的管理

    •  

      依賴排除

      •  

        任何可傳遞的依賴都可以通過 "exclusion" 元素被排除在外。舉例說明,A 依賴 B, B 依賴 C,因此 A 可以標記 C 爲 "被排除的"

    •  

      依賴可選

      •  

        任何可傳遞的依賴可以被標記爲可選的,通過使用 "optional" 元素。例如:A 依賴 B, B 依賴 C。因此,B 可以標記 C 爲可選的, 這樣 A 就可以不再使用 C。

 

 

jar包衝突解決

 

 

命令: mvn dependency:tree -Dverbose

 

1.maven的jar包衝突解決(一般使用排除依賴的方式解決jar包衝突)

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章