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