如何使用maven-helper插件解決jar包沖突問題
一 mavenHelper插件的介紹安裝
1.1 介紹
安裝了Maven Helper插件,只要打開pom文件,就可以打開該pom文件的Dependency Analyzer視圖(在文件打開之后,文件下面會(huì)多出這樣一個(gè)tab),進(jìn)入Dependency Analyzer視圖之后有三個(gè)查看選項(xiàng),分別是Conflicts(沖突)、All Dependencies as List(列表形式查看所有依賴)、All Dependencies as Tree(樹結(jié)構(gòu)查看所有依賴)。并且這個(gè)頁面還支持搜索。很方便!
1.2 安裝
1.在線安裝:File-->setting--->Plugins--->在搜索框中填寫Maven Helper然后搜索,單擊Install按鈕進(jìn)行安裝,裝完重啟IDE。
2.離線安裝:點(diǎn)擊“Plugins”->“Marketplace”->輸入"mavn helper"->點(diǎn)擊“install”->點(diǎn)擊“OK”完成安裝
1.3 helper的使用
1.當(dāng)Maven Helper 插件安裝成功后,打開項(xiàng)目中的pom文件,下面就會(huì)多出一個(gè)試圖
2.helper的界面
打開pom文件,并可以切換tab,簡單使用,如下圖:
Conflicts(查看沖突)
All Dependencies as List(列表形式查看所有依賴)
All Dependencies as Tree(樹形式查看所有依賴)
當(dāng)前界面上還提供搜索功能 方便使用
二 jar包沖突說明
2.1 說明
首先,解決idea中jar包沖突,使用maven的插件:maven helper插件,它能夠給我們羅列出來同一個(gè)jar包的不同版本,以及他們的來源,但是對不同jar包中同名的類沒有辦法。
2.2 依賴順序
1.點(diǎn)擊【All Dependencies as Tree】,查看:從上向下,A依賴于B,B依賴于C;starter依賴core,core依賴api
2.點(diǎn)擊【Conflicts】,從圖中可以看出有哪些jar存在沖突,存在沖突的情況下最終采用了哪個(gè)依賴的版本。標(biāo)紅的就是沖突版本,白色的是當(dāng)前的解析版本。這個(gè)選項(xiàng),需要從下向上看;
A依賴于B,B依賴于C,如下圖:沖突的jar包就是dpscn-apass-oltp-plugin-api
2.3 解決思路
2.3.1 *排除指定的版本*
思想:如果有兩個(gè)依賴的版本發(fā)生了沖突,那么只要把其中一個(gè)依賴給排除掉,只剩下一個(gè)依賴,那么自然就可以解決沖突的問題。我們只需要使用exclusion關(guān)鍵字對相關(guān)依賴進(jìn)行排除就行
1.這里可以看到 spirng-beans-4.2.4.release和spring-beans-5.0.12沖突,這里舍棄spirng-beans-4.2.4.release這個(gè)版本,保留spring-beans-5.0.12 這個(gè)版本。使用 exclusion 排除定位到的沖突包。
2.在4.2.4版本側(cè)選中【exclude】
3.查看pom依賴,刷新pom后
4.再次點(diǎn)擊【conflicts】,可以看到關(guān)于spring-beans的沖突已經(jīng)沒有,現(xiàn)在使用的是spring-beans-5.0.12這個(gè)版本
2.3.2 子工程顯示指定版本
顯示單獨(dú)聲明使用依賴的版本
2.3.3 子工程中先排除,后指定版本
如下圖,在starter-web中排除spring-webmvc,然后指定spring-webmvc的版本為6.0.9。
2.3.4 鎖定版本
方案4:鎖定版本,我們最常使用的解決方式,是使用dependencyManagement統(tǒng)一對依賴的版本進(jìn)行定義。這樣的話,導(dǎo)入依賴的時(shí)候就會(huì)直接使用我們鎖定的依賴版本。
這里要注意兩點(diǎn),版本鎖定和【使用路徑優(yōu)先原則不同,使用路徑優(yōu)先原則,是實(shí)實(shí)在在地將jar包給引入到pom文件中】,而版本鎖定只是規(guī)定了要使用的版本號,只有真實(shí)用到了相關(guān)的依賴,才生效。同時(shí),版本鎖定可以更集中地約束和規(guī)定依賴版本,這種優(yōu)勢是其他方法所不能達(dá)到的。
當(dāng)然了,如果只是簡單的小型項(xiàng)目,使用其他方式可能是更好的解決方法。
http://www.dbjr.com.cn/program/318190efu.htm
三 案例
排除指定版本
3.1 沖突說明
1.沖突依賴描述
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.2.4.RELEASE</version> <exclusions> <exclusion> <artifactId>spring-beans</artifactId> <groupId>org.springframework</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>5.0.12.RELEASE</version> </dependency>
2.說明:從下向上看
spring-aop 版本5.0.12版本
spring-webmvc4.2.4 依賴于spring-web 4.2.4 ,spring-web-4.2.4依賴于spring-aop4.2.4 版本
沖突版本:spring-aop:5.0.12 和spring-aop4.2.4 沖突
3.2 解決方法
排除掉spring-aop4.2.4這個(gè)版本,保留spring-aop:5.0.12 這個(gè)版本
查看maven坐標(biāo):在4.2.4-spirng-webmvc排除掉spring-aop4.2.4版本,刷新pom,重新拉包,如圖
4.查看沖突已解決:再次點(diǎn)擊【conflicts】查看aop的沖突已經(jīng)沒有了
四 案例:子工程指定具體版本
4.1 沖突說明
4.2 排除方法
在父工程中的pom文件中聲明沖突依賴的具體版本。如圖,這里指定:dpsn-appas-oltp-plugin-api的版本為1.0.0
五 案例 鎖定版本*
5.1 沖突說明
鎖定版本,我們最常使用的解決方式,是使用dependencyManagement統(tǒng)一對依賴的版本進(jìn)行定義。這樣的話,導(dǎo)入依賴的時(shí)候就會(huì)直接使用我們鎖定的依賴版本。
這里在父工程的pom里面<dependecyManagement>中的<dependencies>標(biāo)簽中,指定使用版本
<dependency> <groupId>com.pab.dpscn</groupId> <artifactId>corebankpulltest-message</artifactId> <version>1.0.0-dev-test-SNAPSHOT</version> </dependency>
詳情見下圖
5.2 解決方法
1.這里查看依賴要從上向下看:可以看到:
Clearingledger-ledger-1.0.0-snapshot依賴于Clearingledger-ledger-facade-1.0.0-snapshot
Clearingledger-ledger-facade-1.0.0-snapshot依賴于corebankpulltest-message-1.0.0-dev-snapshot
沖突版本為:corebankpulltest-message-1.0.0-dev-snapshot和corebankpulltest-message-1.0.0-dev-test-snapshot版本
2.解決辦法:在父工程的dependencyManagement標(biāo)簽中鎖定版本使用corebankpulltest-message:1.0.0-dev-test-snapshot版本
到此這篇關(guān)于使用maven-helper插件解決jar包沖突的文章就介紹到這了,更多相關(guān)maven-helper插件解決jar包沖突內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springboot整合logback實(shí)現(xiàn)日志管理操作
本章節(jié)是記錄logback在springboot項(xiàng)目中的簡單使用,本文將會(huì)演示如何通過logback將日志記錄到日志文件或輸出到控制臺(tái)等管理操作,感興趣的朋友跟隨小編一起看看吧2024-02-02Netty搭建WebSocket服務(wù)器實(shí)戰(zhàn)教程
這篇文章主要介紹了Netty搭建WebSocket服務(wù)器實(shí)戰(zhàn),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-03-03Java中的List接口實(shí)現(xiàn)類LinkList和ArrayList詳解
這篇文章主要介紹了Java中的List接口實(shí)現(xiàn)類LinkList和ArrayList詳解,List接口繼承自Collection接口,是單列集合的一個(gè)重要分支,實(shí)現(xiàn)了List接口的對象稱為List集合,在List集合中允許出現(xiàn)重復(fù)的元素,所有的元素是以一種線性方式進(jìn)行存儲(chǔ)的,需要的朋友可以參考下2024-01-01關(guān)于Long和Integer相互轉(zhuǎn)換方式
這篇文章主要介紹了關(guān)于Long和Integer相互轉(zhuǎn)換方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08詳解Spring框架下向異步線程傳遞HttpServletRequest參數(shù)的坑
這篇文章主要介紹了詳解Spring框架下向異步線程傳遞HttpServletRequest參數(shù)的坑,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-03-03