配置所需要的依赖_Maven依赖管理之依赖传递
1 傳遞依賴
2.1 什么是傳遞依賴
當A 依賴B、B依賴C,在A中導入B后會自動導入C,C是A的傳遞依賴,如果C依賴D則D也可能是A的傳遞依賴。
演示:
web中添加struts-spring的jar,傳遞依賴了spring
1.2 依賴范圍對傳遞依賴的影響(了解)
依賴會有依賴范圍,依賴范圍對傳遞依賴也有影響,有A、B、C,A依賴B、B依賴C,C可能是A的傳遞依賴,如下圖:
最左邊一列為直接依賴,理解為A依賴B的范圍,最頂層一行為傳遞依賴,理解為B依賴C的范圍,行與列的交叉即為A傳遞依賴C的范圍。
舉例:
比如 A對 B 有 compile 依賴,B 對C有 runtime 依賴,那么根據表格所示A對C 有 runtime 依賴。
測試
dao依賴junit,scop為test
service依賴dao.
查看下圖紅色框內所示傳遞依賴范圍:
所以maven-first所依賴的junit的jar沒有加入到maven-web工程。
如果修改maven-first依賴junit的scop為compile,maven-first所依賴的junit的jar包會加入到maven-web工程中,符合上邊表格所示,查看下圖紅色框內所示:
2 依賴版本沖突解決
2.1 問題
當一個項目依賴的構件比較多時,它們相互之前存在依賴,當你需要對依賴版本統一管理時如果讓maven自動來處理可能并不能如你所愿,如下例子:
同時加入以下依賴,觀察依賴:
org.apache.strutsstruts2-spring-plugin2.3.24org.springframeworkspring-context4.2.4.RELEASEorg.apache.struts依賴spirng-beans-3.0.5,spring-context依賴spring-beans-4.2.4,但是發現spirng-beans-3.0.5加入到工程中,而我們希望spring-beans-4.2.4加入工程。
1.2 依賴調解原則
maven自動按照下邊的原則調解:
1、第一聲明者優先原則
在pom文件定義依賴,先聲明的依賴為準。
測試:
如果將上邊struts-spring-plugins和spring-context順序顛倒,系統將導入spring-beans-4.2.4。
分析:
由于spring-context在前邊以spring-context依賴的spring-beans-4.2.4為準,所以最終spring-beans-4.2.4添加到了工程中。
2、路徑近者優先原則
例如:A依賴 spirng-beans-4.2.4,A依賴B依賴 spirng-beans-3.0.5,則spring-beans-4.2.4優先被依賴在A中,因為spring-beans-4.2.4相對spirng-beans-3.0.5被A依賴的路徑最近。
測試:
在本工程中的pom中加入spirng-beans-4.2.4的依賴,根據路徑近者優先原則,系統將導入spirng-beans-4.2.4:
org.springframework
spring-beans
4.2.4.RELEASE
1.3 排除依賴
上邊的問題也可以通過排除依賴方法輔助依賴調解,如下:
比如在依賴struts2-spring-plugin的設置中添加排除依賴,排除spring-beans,
下邊的配置表示:依賴struts2-spring-plugin,但排除struts2-spring-plugin所依賴的spring-beans。
org.apache.strutsstruts2-spring-plugin2.3.24org.springframeworkspring-beansorg.springframeworkspring-context1.4 鎖定版本
面對眾多的依賴,有一種方法不用考慮依賴路徑、聲明優化等因素可以采用直接鎖定版本的方法確定依賴構件的版本,版本鎖定后則不考慮依賴的聲明順序或依賴的路徑,以鎖定的版本的為準添加到工程中,此方法在企業開發中常用。
如下的配置是鎖定了spring-beans和spring-context的版本:
org.springframeworkspring-beans4.2.4.RELEASEorg.springframeworkspring-context4.2.4.RELEASE注意:在工程中鎖定依賴的版本并不代表在工程中添加了依賴,如果工程需要添加鎖定版本的依賴則需要單獨添加標簽,如下:
org.springframeworkspring-beansorg.springframeworkspring-context上邊添加的依賴并沒有指定版本,原因是已在中鎖定了版本,所以在下不需要再指定版本。
總結
以上是生活随笔為你收集整理的配置所需要的依赖_Maven依赖管理之依赖传递的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 倒计时几秒_和平精英:倒计时0秒时进圈会
- 下一篇: androidsdktools安装_如何