2 回答

TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超8個(gè)贊
maven3在解決依賴(lài)沖突采用就近原則,在就近原則不能做出判斷的情況下依據(jù)pom.xml的聲明的先后順序決定導(dǎo)入的jar。
jar包沖突多為傳遞性依賴(lài)的管理不當(dāng)給項(xiàng)目帶來(lái)的麻煩解決思路羅列如下:
1、首先查看當(dāng)前項(xiàng)目的jar關(guān)系如果使用eclipse、idea等編輯器可打開(kāi)pom.xml文檔底部有Dependency Hierarchy可供查看jar的依賴(lài)情況。第二種使用maven插件的方式使用命令行:
mvn dependency:tree
結(jié)果中重要的是兩個(gè)部分,首先是Used undeclared dependencies意值項(xiàng)目中使用到的,但是沒(méi)有顯示聲明的依賴(lài)。這種依賴(lài)意味著潛在的風(fēng)險(xiǎn)。他是通過(guò)其他直接依賴(lài)導(dǎo)入的傳遞性依賴(lài),當(dāng)直接依賴(lài)升級(jí)時(shí)相關(guān)依賴(lài)的版本也會(huì)變化??赡軐?dǎo)致當(dāng)前項(xiàng)目報(bào)錯(cuò),且不易察覺(jué)。另一個(gè)部分是Unused declared dependencies意指項(xiàng)目中未使用的,但顯式聲明的依賴(lài)。需要注意的是我們不應(yīng)該直接刪除了事而是應(yīng)該仔細(xì)分析。因?yàn)檫@個(gè)命令行發(fā)現(xiàn)不了執(zhí)行測(cè)試和運(yùn)行時(shí)需要的依賴(lài)。
以上方法都可可完整的查看當(dāng)前項(xiàng)目的jar情況,個(gè)人更喜歡使用命令行。
2、通過(guò)以上方法我們可以看到項(xiàng)目中引用jar版本號(hào);接下來(lái)就是如何排除掉我們不想要版本的jar;語(yǔ)法如下:
<dependency>
<groupId>.....</grooupId>
<artifactId>....</artifactId>
<version>...</version>
<exclusions>
<exclusion>
<groupId>.....</groupId>
<artifactId>.....</artifactId>
</exclusion>
</exclesions>
<dependency>
<!--exclusions可包含一個(gè)或多個(gè)exclusion元素-->
3、一下規(guī)避jar沖突的思路,如果項(xiàng)目中有直接用到某個(gè)jar而這個(gè)jar已通過(guò)傳遞依賴(lài)的方式引入到maven項(xiàng)目里了。最好排除這個(gè)傳遞依賴(lài)在pom里面明確的聲明這個(gè)依賴(lài)。歸類(lèi)依賴(lài),不斷的優(yōu)化依賴(lài)如,去除多余的依賴(lài)。

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超6個(gè)贊
maven3在解決依賴(lài)沖突采用就近原則,在就近原則不能做出判斷的情況下依據(jù)pom.xml的聲明的先后順序決定導(dǎo)入的jar。
jar包沖突多為傳遞性依賴(lài)的管理不當(dāng)給項(xiàng)目帶來(lái)的麻煩解決思路羅列如下:
1、首先查看當(dāng)前項(xiàng)目的jar關(guān)系如果使用eclipse、idea等編輯器可打開(kāi)pom.xml文檔底部有Dependency Hierarchy可供查看jar的依賴(lài)情況。第二種使用maven插件的方式使用命令行:
1 | mvn dependency:tree |
結(jié)果中重要的是兩個(gè)部分,首先是Used undeclared dependencies意值項(xiàng)目中使用到的,但是沒(méi)有顯示聲明的依賴(lài)。這種依賴(lài)意味著潛在的風(fēng)險(xiǎn)。他是通過(guò)其他直接依賴(lài)導(dǎo)入的傳遞性依賴(lài),當(dāng)直接依賴(lài)升級(jí)時(shí)相關(guān)依賴(lài)的版本也會(huì)變化。可能導(dǎo)致當(dāng)前項(xiàng)目報(bào)錯(cuò),且不易察覺(jué)。另一個(gè)部分是Unused declared dependencies意指項(xiàng)目中未使用的,但顯式聲明的依賴(lài)。需要注意的是我們不應(yīng)該直接刪除了事而是應(yīng)該仔細(xì)分析。因?yàn)檫@個(gè)命令行發(fā)現(xiàn)不了執(zhí)行測(cè)試和運(yùn)行時(shí)需要的依賴(lài)。
以上方法都可可完整的查看當(dāng)前項(xiàng)目的jar情況,個(gè)人更喜歡使用命令行。
2、通過(guò)以上方法我們可以看到項(xiàng)目中引用jar版本號(hào);接下來(lái)就是如何排除掉我們不想要版本的jar;語(yǔ)法如下:
1 2 3 4 5 6 7 8 9 10 11 12 | <dependency> <groupId>.....</grooupId> <artifactId>....</artifactId> <version>...</version> <exclusions> <exclusion> <groupId>.....</groupId> <artifactId>.....</artifactId> </exclusion> </exclesions> <dependency> <!--exclusions可包含一個(gè)或多個(gè)exclusion元素--> |
3、一下規(guī)避jar沖突的思路,如果項(xiàng)目中有直接用到某個(gè)jar而這個(gè)jar已通過(guò)傳遞依賴(lài)的方式引入到maven項(xiàng)目里了。最好排除這個(gè)傳遞依賴(lài)在pom里面明確的聲明這個(gè)依賴(lài)。歸類(lèi)依賴(lài),不斷的優(yōu)化依賴(lài)如,去除多余的依賴(lài)。
- 2 回答
- 0 關(guān)注
- 1451 瀏覽
添加回答
舉報(bào)