Maven Helper插件解決包沖突問題

安裝Maven Helper

idea安裝maven helper

安裝成功后打開pom文件

pom.xml
dependency analyzer

可查看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)定性。

Maven 默認(rè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 排除掉,這樣也避免了包沖突。


利用helper插件
去除依賴

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

dependencyManagement
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Jar包沖突是老生常談的問題,幾乎每一個(gè)Java程序猿都不可避免地遇到過,并且也都能想到通常的原因一般是同一個(gè)Ja...
    sherlockyb閱讀 37,836評(píng)論 1 65
  • 管理包依賴是 Maven 核心功能之一,下面通過如何引入 jar 包;如何解析 jar 包依賴;包沖突是如何產(chǎn)生;...
    data4閱讀 12,293評(píng)論 3 16
  • 逅弈 轉(zhuǎn)載請(qǐng)注明原創(chuàng)出處,謝謝! 以前的日子 以前我們寫代碼時(shí),jar包都默認(rèn)放在一個(gè)叫 /lib 的目錄下,然后...
    逅弈閱讀 3,189評(píng)論 3 45
  • 前言什么是 POMQuick Overview POM 常用元素 pom.xml 完整注釋 參考 0 前言 什么是...
    阿父閱讀 12,763評(píng)論 1 36
  • 我唯一一個(gè)不敢輕易得罪的親戚,分分鐘要了老命啊,媽的,你怎么忍心這么欺負(fù)你的小可愛他,良心不覺得痛嗎!
    一千零一夜之經(jīng)典語錄閱讀 172評(píng)論 0 0

友情鏈接更多精彩內(nèi)容