maven解決依賴沖突的三種解決方法
前言
隨著maven項(xiàng)目不斷推進(jìn),開發(fā)人員難免會(huì)遇到這樣一個(gè)問題,在添加新的依賴jar包后,會(huì)發(fā)現(xiàn)和原有的項(xiàng)目依賴產(chǎn)生沖突(多數(shù)情況是由于依賴傳遞引起的),這個(gè)時(shí)候就需要我們根據(jù)實(shí)際情況來選擇生效的最終依賴。
比如下圖:
下面將以上面的例子來對(duì)如何解決依賴沖突進(jìn)行講解
方法一:使用maven提供的傳遞依賴原則
(一)第一聲明者優(yōu)先原則
其實(shí)所謂第一聲明者,就是在pom文件中,優(yōu)先使用書寫順序排在前面的依賴包,也就是誰先聲明,就先用誰的依賴。
如果我們想在我們的項(xiàng)目中使用5.0.2版本的spring-bean包的話,只需要調(diào)整一下依賴的順序即可。
(二)路徑者優(yōu)先原則
路徑者優(yōu)先原則也很好理解,如果有兩個(gè)依賴版本沖突了,那么就顯式地在pom文件中把要使用的依賴添加上去。
這種方法雖然簡(jiǎn)單直接,但是只適合于項(xiàng)目依賴的jar包比較少的場(chǎng)景,一旦管理的依賴數(shù)量達(dá)到一定數(shù)量,簡(jiǎn)單的調(diào)整依賴的順序并不能解決實(shí)際沖突問題。
在實(shí)際開發(fā)中很少應(yīng)用到。
方法二:排除依賴(有時(shí)候會(huì)用到)
排除依賴的思路也很簡(jiǎn)單,如果有兩個(gè)依賴的版本發(fā)生了沖突,那么只要把其中一個(gè)依賴給排除掉,只剩下一個(gè)依賴,那么自然就可以解決沖突的問題。
我們只需要使用exclusion關(guān)鍵字對(duì)相關(guān)依賴進(jìn)行排除就行
方法三:版本鎖定(最常用,推薦使用)
對(duì)于版本沖突的問題,我們最常使用的解決方式,是使用dependencyManagement統(tǒng)一對(duì)依賴的版本進(jìn)行定義。這樣的話,導(dǎo)入依賴的時(shí)候就會(huì)直接使用我們鎖定的依賴版本。
這里要注意兩點(diǎn),版本鎖定和使用路徑優(yōu)先原則不同,使用路徑優(yōu)先原則,是實(shí)實(shí)在在地將jar包給引入到pom文件中,而版本鎖定只是規(guī)定了要使用的版本號(hào),只有真實(shí)用到了相關(guān)的依賴,才生效。同時(shí),版本鎖定可以更集中地約束和規(guī)定依賴版本,這種優(yōu)勢(shì)是其他方法所不能達(dá)到的。
當(dāng)然了,如果只是簡(jiǎn)單的小型項(xiàng)目,使用其他方式可能是更好的解決方法。
到此這篇關(guān)于maven解決依賴沖突的三種解決方法的文章就介紹到這了,更多相關(guān)maven依賴沖突解決內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Mybatis工具類JdbcTypeInterceptor運(yùn)行時(shí)自動(dòng)添加jdbcType屬性
今天小編就為大家分享一篇關(guān)于Mybatis工具類JdbcTypeInterceptor運(yùn)行時(shí)自動(dòng)添加jdbcType屬性,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-12-12Gradle進(jìn)階使用結(jié)合Sonarqube進(jìn)行代碼審查的方法
今天小編就為大家分享一篇關(guān)于Gradle進(jìn)階使用結(jié)合Sonarqube進(jìn)行代碼審查的方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-12-12java統(tǒng)計(jì)漢字字?jǐn)?shù)的方法示例
這篇文章主要介紹了java統(tǒng)計(jì)漢字字?jǐn)?shù)的方法,結(jié)合實(shí)例形式分析了java正則判定、字符串遍歷及統(tǒng)計(jì)相關(guān)操作技巧,需要的朋友可以參考下2017-05-05SpringBoot3.x中spring.factories?SPI?服務(wù)發(fā)現(xiàn)機(jī)制的改變問題小結(jié)
spring.factories其實(shí)是SpringBoot提供的SPI機(jī)制,底層實(shí)現(xiàn)是基于SpringFactoriesLoader檢索ClassLoader中所有jar引入的META-INF/spring.factories文件,這篇文章主要介紹了SpringBoot3.x中spring.factories?SPI?服務(wù)發(fā)現(xiàn)機(jī)制的改變,需要的朋友可以參考下2023-05-05SpringBoot實(shí)現(xiàn)動(dòng)態(tài)定時(shí)任務(wù)的示例代碼
在SpringBoot項(xiàng)目中簡(jiǎn)單使用定時(shí)任務(wù),不過由于要借助cron表達(dá)式且都提前定義好放在配置文件里,不能在項(xiàng)目運(yùn)行中動(dòng)態(tài)修改任務(wù)執(zhí)行時(shí)間,實(shí)在不太靈活。現(xiàn)在我們就來實(shí)現(xiàn)可以動(dòng)態(tài)修改cron表達(dá)式的定時(shí)任務(wù),感興趣的可以了解一下2022-10-10Java使用Request獲取請(qǐng)求參數(shù)的通用方式詳解
這篇文章主要給大家介紹了關(guān)于Java使用Request獲取請(qǐng)求參數(shù)的通用方式,在Java后端開發(fā)中第一步就是獲取前端傳過來的請(qǐng)求參數(shù),文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-01-01SpringBoot基于Mybatis-Plus自動(dòng)代碼生成
這篇文章主要介紹了SpringBoot基于Mybatis-Plus自動(dòng)代碼生成,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04java 對(duì)稱加密算法實(shí)現(xiàn)詳解
這篇文章主要介紹了java 對(duì)稱加密算法實(shí)現(xiàn)詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07