依賴是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包衝突)