javascript
依赖项出现感叹号怎么办_SpringBoot中如何对依赖进行管理?
SpringBoot中的起步依賴(starter)是一組特定功能的依賴項(xiàng)集合,SpringBoot通過(guò)starter來(lái)進(jìn)行項(xiàng)目的依賴管理,而不是直接基于單獨(dú)的依賴項(xiàng)來(lái)進(jìn)行依賴管理。
starter其實(shí)就是特殊的Maven依賴項(xiàng)或者Gradle依賴項(xiàng),它把常用的庫(kù)組合到一起構(gòu)成了一個(gè)特定的功能。
舉幾個(gè)例子:spring-boot-starter-test是集成了測(cè)試功能的starter,spring-boot-starter-web是集成了web功能的starter,spring-boot-starter-data-mongodb是集成了MongoDB功能的starter。
starter中的依賴項(xiàng)都是經(jīng)過(guò)官方精心測(cè)試的,能夠保證相互之間的兼容性,最好不要進(jìn)行更改。但是對(duì)于一些特定的場(chǎng)景、特定的需求來(lái)說(shuō)也會(huì)遇到修改依賴項(xiàng)的時(shí)候,今天我們簡(jiǎn)單說(shuō)一下如何進(jìn)行修改。
測(cè)試目標(biāo):spring-boot-starter-web
我們項(xiàng)目里有2個(gè)starter,其中一個(gè)就是spring-boot-starter-web,我們就以它為目標(biāo)進(jìn)行依賴管理的測(cè)試。如圖:
spring-boot-starter-web
首先我們先通過(guò)以下maven命令查看一下spring-boot-starter-web有哪些依賴項(xiàng)。
mvn dependency:treespring-boot-starter-web的依賴
從上圖中我們可以看出我們項(xiàng)目依賴了spring-boot-starter-web,而spring-boot-starter-web又通過(guò)依賴傳遞依賴了jackson相關(guān)的jar包。我們接下來(lái)對(duì)jackson相關(guān)的包進(jìn)行排除和替換,一起來(lái)看下需要什么操作。
排除依賴
如果我們需要把jackson相關(guān)的包移除掉該怎么辦呢?很簡(jiǎn)單,直接在maven中通過(guò)標(biāo)簽就可以了,如圖:
exclusions
然后再查看一下依賴,就發(fā)現(xiàn)spring-boot-starter-json下已經(jīng)沒(méi)有jackson相關(guān)的包了:
排除jackson相關(guān)的包
maven的依賴管理原則
在對(duì)jackson相關(guān)的包進(jìn)行替換之前,我們先看一下maven在處理依賴時(shí)的2個(gè)原則。
第一原則:路徑最短者優(yōu)先
比如說(shuō)A對(duì)于C的依賴有2條路徑,第一條路徑為A->B->C(1.0),第二條路徑為A->H->I->C(2.0),因?yàn)榈谝粭l路徑的長(zhǎng)度為2,第二條路徑的長(zhǎng)度為3,所以A采用路徑最短的第一條路徑下的C(1.0)。
第二原則:第一聲明者優(yōu)先
如果2條路徑的長(zhǎng)度都一樣的話,那么此時(shí)第一聲明者會(huì)被采用。
比如說(shuō)A對(duì)于C的依賴有2條路徑,第一條路徑為A->B->C(1.0),第二條路徑為A->H->C(2.0),此時(shí)第一條路徑的長(zhǎng)度和第二條路徑的長(zhǎng)度都是2,這個(gè)時(shí)候如果第一條路徑先聲明那么對(duì)于C的依賴就是1.0,如果是第二條路徑先聲明那么對(duì)于C的依賴就是2.0。
綜上所述,大家應(yīng)該能夠發(fā)現(xiàn),maven對(duì)于依賴項(xiàng)的管理和依賴項(xiàng)的版本沒(méi)有關(guān)系。
替換依賴
替換依賴從字面上理解很簡(jiǎn)單,就是取代的意思,但是這里要講清楚,替換包括高版本替換低版本和低版本替換高版本這兩種。
根據(jù)maven的路徑最短者優(yōu)先的原則,如果我們想對(duì)jackson相關(guān)的包進(jìn)行替換的話,我們直接在maven的pom文件中添加我們需要的特定版本的依賴項(xiàng)就可以了,而不用在意這個(gè)版本是更高的版本還是更低的版本,也不用再通過(guò)標(biāo)簽排除掉現(xiàn)有的版本,因?yàn)槲覀冎苯犹砑拥囊蕾図?xiàng)路徑更短。
下圖是新添加的jackson相關(guān)的依賴,我們把改為更低的版本2.8.11:
2.8.11版本的jackson
新增的jackson相關(guān)的依賴
我們?cè)賮?lái)查看一下依賴發(fā)現(xiàn)spring-boot-starter-json下已經(jīng)沒(méi)有的jackson相關(guān)的依賴,底部則直接添加了我們新配置的2.8.11版本的jackson相關(guān)的包。
新增的jackson依賴
需要注意的是這是maven的配置,我們只需添加我們需要的特定版本的依賴項(xiàng)就可以了,而不用擔(dān)心是更高版本的依賴還是更低版本的依賴,因?yàn)槲覀冎苯犹砑拥囊蕾図?xiàng)相對(duì)于starter中的依賴項(xiàng)來(lái)說(shuō)路徑更短。
但是對(duì)于Gradle管理的項(xiàng)目來(lái)說(shuō)并不是這么直接簡(jiǎn)單,Gradle對(duì)于依賴項(xiàng)會(huì)優(yōu)先使用最新的版本。
如果你想用低版本的依賴項(xiàng),除了需要添加這個(gè)低版本的依賴項(xiàng)之外還需要排除掉高版本的依賴項(xiàng)才可以。
結(jié)束
今天的內(nèi)容到此就講完了,我們講述了springboot中如何排除特定的依賴,如何替換特性的依賴。另外還講了maven對(duì)于依賴管理的2條原則。
希望這些能夠幫助到大家,如果大家有什么疑問(wèn)歡飲留言哦。
總結(jié)
以上是生活随笔為你收集整理的依赖项出现感叹号怎么办_SpringBoot中如何对依赖进行管理?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: NFS精简版配置方法
- 下一篇: JS实现css属性动画效果