Maven jar包沖突的解決方案
現(xiàn)象
創(chuàng)建一個(gè)maven工程,引入spring-context包。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.8.RELEASE</version>
</dependency>
此時(shí)看左側(cè)的lib,我們發(fā)現(xiàn)引入了一個(gè)坐標(biāo),多出了很多的jar包,這個(gè)現(xiàn)象叫做依賴傳遞,就是說,當(dāng)前坐標(biāo)所依賴的jar包也會(huì)一同引入進(jìn)來,這里的版本都是5.0.8的。

接下來,我們?cè)僖胍粋€(gè)springmvc。我們換一個(gè)版本,我們引入4.2.4版本
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
我們通過idea給的maven分析圖可以看出,mvc和context都依賴與sprng-core一個(gè),依賴的是5.0.8版本,一個(gè)依賴的是4.2.4版本。

那么真正加載的是哪個(gè)版本呢。是5.0.8版本。

此時(shí)就是存在了jar包的沖突問題,那么我們解決這個(gè)問題,有三種方式。
聲明優(yōu)先原則
此時(shí)我們的pom文件中是先聲明的5.0.8版本,后聲明的4.2.4版本,我們將其調(diào)換順序。


此時(shí)我們發(fā)現(xiàn)他們共同依賴的jar包,都變成了4.2.4版本,這就是聲明優(yōu)先原則。
就近優(yōu)先原則
比如,我們不想調(diào)換順序,我們就是想使用4.2.4版本的spring-core。我們可以單獨(dú)引入進(jìn)來

此時(shí)再看,我們發(fā)現(xiàn)依賴的spring-core已經(jīng)變成了4.2.4版本了。

這個(gè)就是就近優(yōu)先原則,就近優(yōu)先是直接依賴,直接依賴的優(yōu)先級(jí)大于傳遞依賴的優(yōu)先級(jí)。
排除依賴
這種方式我們可以直接排除spring-context中的spring-core的傳遞依賴。

再看依賴,此時(shí)已經(jīng)改為4.2.4.

使用exclusions標(biāo)簽的時(shí)候,其內(nèi)部不用寫版本號(hào),這是唯一不用寫版本號(hào)的一種情況。因?yàn)樗J(rèn)就去找當(dāng)前依賴的版本了。
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
java?JVM方法分派模型靜態(tài)分派動(dòng)態(tài)分派全面講解
這篇文章主要為大家介紹了java?JVM方法分派模型靜態(tài)分派動(dòng)態(tài)分派全面講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
java中給實(shí)體對(duì)象屬性的空值賦默認(rèn)值
這篇文章主要介紹了java中給實(shí)體對(duì)象屬性的空值賦默認(rèn)值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03
Java開發(fā)之spring security實(shí)現(xiàn)基于MongoDB的認(rèn)證功能
這篇文章主要介紹了Java開發(fā)之spring security實(shí)現(xiàn)基于MongoDB的認(rèn)證功能,結(jié)合實(shí)例形式分析了spring security在非JDBC環(huán)境下的自定義認(rèn)證服務(wù)實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-11-11
java實(shí)現(xiàn)幸運(yùn)抽獎(jiǎng)系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)幸運(yùn)抽獎(jiǎng)系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-07-07
Java web過濾器驗(yàn)證登錄防止未登錄進(jìn)入界面
這篇文章主要介紹了Java web過濾器驗(yàn)證登錄防止未登錄進(jìn)入界面,在一些系統(tǒng)中經(jīng)??梢杂玫酱斯δ?,對(duì)java web 驗(yàn)證登錄知識(shí)感興趣的朋友一起看下吧2016-08-08

