安裝Maven Helper

安裝成功后打開pom文件


可查看pom所有包引用tree
Maven 解析 jar 包依賴
????????在 pom.xml 中引入某個(gè) jar 包依賴,當(dāng) Maven 解析該依賴時(shí),需要引入的 jar 包不僅僅只有 當(dāng)前jar包,還會(huì)有這個(gè)jar包內(nèi)部依賴的 jar 包, 內(nèi)部依賴的 jar 包依賴的 jar 包......,依賴關(guān)系不斷傳遞,直至沒有依賴(傳遞依賴)。
如上圖所示,層層依賴
依賴范圍
如果不顯示執(zhí)行?屬性時(shí),默認(rèn)?compile。
scope 有哪些屬性:compile, provided, runtime, test, system ,import
compile: 此依賴范圍對(duì) 于編譯、測(cè)試、運(yùn)行三種classpath都有效
provided:?只對(duì)編譯和測(cè)試的classpath有效
runtime :?只對(duì)測(cè)試和運(yùn)行的classpath有效?
import :?該依賴范圍不會(huì)對(duì)三種classpath產(chǎn)生影響,該依賴范圍只能與dependencyManagement元素配合使用,其功能為將目標(biāo)pom文件中dependencyManagement的配置導(dǎo)入合并到當(dāng)前pom的dependencyManagement中
test :只對(duì)測(cè)試classpath有效
此時(shí)存在包沖突問題
????????假設(shè) A->B->C->D1, E->F->D2,D1,D2 分別為 D 的不同版本。
如果 pom.xml 文件中引入了 A 和 E 之后,按照 Maven 傳遞依賴原則,工程內(nèi)需要引入的實(shí)際 Jar 包將會(huì)有:A B C D1 和 E F D2,因此 D1,D2 將會(huì)產(chǎn)生包沖突。
解決包沖突方法
????????Maven 解析 pom.xml 文件時(shí),同一個(gè) jar 包只會(huì)保留一個(gè),這樣有效的避免因引入兩個(gè) jar 包導(dǎo)致的工程運(yùn)行不穩(wěn)定性。
1. 最短路徑優(yōu)先(這個(gè)優(yōu)先級(jí)高)
Maven 面對(duì) D1 和 D2 時(shí),會(huì)默認(rèn)選擇最短路徑的那個(gè) jar 包,即 D2。E->F->D2 比 A->B->C->D1 路徑短 1。
2. 最先聲明優(yōu)先
如果路徑一樣的話: A->B->D1, E->F->D2 ,兩個(gè)依賴路徑長度都是 2,那么就選擇最先聲明。
3. 移除依賴
如果我們不想通過 A->B->->D1 引入 D1 的話,那么我們?cè)诼暶饕?A 的時(shí)候?qū)?D1 排除掉,這樣也避免了包沖突。


4.? 版本鎖定原則(最常使用)?在配置文件pom.xml中先聲明要使用哪個(gè)版本的相應(yīng)jar包,聲明后其他版本的jar包一律不依賴。解決了依賴沖突。?當(dāng)使用多個(gè)模塊時(shí),parent 一定要使用包管理模塊來規(guī)范 Jar 包版本,而不是包依賴模塊直接引入依賴。 dependencyManagement?
