Maven學習歸納(四)——傳遞依賴和依賴的規則


一、傳遞依賴

官方文檔解釋的傳送門:http://ifeve.com/maven-dependency-mechanism/

當存在傳遞依賴的情況時,主工程對間接依賴的jar可以訪問嗎?

例如:A.jar依賴於B.jar,而B.jar依賴於C.jar,那么要怎么修改配置文件,才會讓A.jar 也依賴 B.jar 呢?

這要看傳遞依賴的jar包引入時的依賴范圍——只有依賴范圍為compile時可以訪問

即 要使A.jar 依賴於C.jar 當且僅當C.jar的范圍是compile


如下演示HelloWrold2項目依賴 ——》HelloWrold項目依賴——》junit
此時HelloWrold這個項目是有junit.jar包的,而HelloWrold2是沒有junit這個jar包的,如下所示:

需要在被依賴的項目HelloWorld的pom.xml上改寫

改寫之后,項目就出現了需要間接依賴的的jar包

 

二、依賴原則

依賴原則目的:防止jar包的沖突

為了避免造成依賴重復,需要選擇一個依賴路徑

1. 路徑最短優先原則

存在兩個項目依賴同個類型但不同版本的jar包,這個時候會優先選擇路徑短的

項目配置情況:

HelloWrold2 依賴 HelloWrold

HelloWrold   依賴  Junit3.8 jar

HelloWrold   依賴  Junit4.0 jar

從圖中看,顯然junit3.8距離HelloWrold2更近點的

既然都擁有junit這個包,那么原本是 3.8 的 HelloWrold2 再依賴了HelloWrold后,會發生什么情況呢??

配置如下:

運行結果如圖所示:此時HelloWrold保持原來的junit-3.8.jar不變

2. 路徑長度相同

路徑長度相同的情況下,又可以分為是否有在同一個pom.xml兩種情況

2.1 覆蓋:

如果在同一pom.xml文件中有2個相同的依賴;后面聲明的會覆蓋前面的依賴

但這里要說嚴禁使用本情況,嚴禁在同一個pom中聲明兩個不同的依賴

2.2 優先:

如果是在不同pom.xml中有2個相同的依賴;則先聲明的依賴,會覆蓋后面生命的依賴

如下HelloWorld2依賴項目HelloWorld,和項目HelloWorld3

HelloWorld與HelloWorld3都有不同版本的commons-fileupload.jar

顯然,先寫在前面的HelloWorld3的jar包被采用了

 

簡單的依賴就完了呢~ o(* ̄▽ ̄*)o


免責聲明!

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



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