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