日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
Maven中jar包沖突原理及解決的方式

在實(shí)際開(kāi)發(fā)中,多模塊項(xiàng)目常會(huì)使用Maven進(jìn)行包管理。在poml文件中進(jìn)行包依賴(lài)時(shí),常存在引入一個(gè)jar包中默認(rèn)依賴(lài)了其他的jar包的情況。這樣很容易導(dǎo)致jar包沖突,從而產(chǎn)生一些詭異問(wèn)題,如版本問(wèn)題導(dǎo)致的類(lèi)、方法找不到等。下面我們將聊聊具體關(guān)于依賴(lài)沖突產(chǎn)生的原因、排查方式以及解決的方案。

創(chuàng)新互聯(lián)是專(zhuān)業(yè)的修水網(wǎng)站建設(shè)公司,修水接單;提供成都做網(wǎng)站、網(wǎng)站設(shè)計(jì),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專(zhuān)業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行修水網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專(zhuān)業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專(zhuān)業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!

依賴(lài)傳遞的概念

舉個(gè)簡(jiǎn)單例子,比如一個(gè)多模塊項(xiàng)目依賴(lài)關(guān)系如下圖。其中bepe-dal引入了common-lib,當(dāng)bepe-manager模塊中引入bepe-dal時(shí),common-lib這個(gè)依賴(lài)也會(huì)被引入到bepe-manager模塊中,這個(gè)就是依賴(lài)傳遞。

依賴(lài)沖突的概念

依賴(lài)沖突指當(dāng)模塊中引入很多jar包時(shí),如果其中存在著groupId和artifactId 一樣,但是version不一樣的兩個(gè)jar包,這就是依賴(lài)沖突。那么在應(yīng)用時(shí)會(huì)選用哪一個(gè)version呢?這就是我們接下來(lái)要討論的沖突解決方式。

依賴(lài)沖突該是怎么解決的?

  • 最短路徑原則
  • 聲明優(yōu)先原則
  • 依賴(lài)排除

1. 最短路徑原則

當(dāng)存在groupId和artifactId一致但是version不一致的jar包沖突時(shí),模塊會(huì)自動(dòng)選擇距離自己路徑短的包。如:bepe-manager到common-lib(1.0)的距離為2,bepe-manager到common-lib(2.0)的距離為1,就會(huì)選擇距離短的common-lib(2.0),這就是最短路徑原則。

2. 聲明優(yōu)先原則

當(dāng)沖突包路徑距離長(zhǎng)度一樣時(shí),這個(gè)時(shí)候就會(huì)依據(jù)其在pom文件中聲明的先后順序。

在manager模塊pom.xml中,如果先引用bepe-common,就會(huì)用2.0版本的common-lib。

 
 
 
  1.   
  2.  com.company.bepe  
  3.  bepe-common  
  4.  2.2  
  5.   
  6.   
  7.  om.company.bepe  
  8.  bepe-dal  
  9.  2.2  
  10.   

3. 依賴(lài)排除

通過(guò) 標(biāo)簽將不需要依賴(lài)的包進(jìn)行排除,通過(guò)這種方式我們就靈活進(jìn)行取舍。但是該如何發(fā)現(xiàn)沖突呢?接下來(lái)將討論關(guān)于依賴(lài)沖突排查的方式。

依賴(lài)沖突情況該怎么排查?

我們可以借助一些插件工具幫助找出沖突jar的具體位置。下面分享一下我在項(xiàng)目中排查并解決包沖突的兩種方式。

  • maven-enforcer-plugin 插件
  • Maven Helper 插件

1. maven-enforcer-plugin插件

Maven提供了Maven-Enforcer-Plugin插件 , 用來(lái)校驗(yàn)約定遵守情況,比依賴(lài) jar 包的版本等等。當(dāng)規(guī)則檢查不通過(guò)的時(shí)候則會(huì)構(gòu)建失敗。

(1) 在pom.xml中引入該插件

rules內(nèi)則是定義校驗(yàn)規(guī)則,通過(guò)配置 可實(shí)現(xiàn)重復(fù)依賴(lài)檢測(cè)。也支持自定義做一些其他檢驗(yàn)如版本檢驗(yàn)等。關(guān)于maven-enforcer-plugin插件rules的其他配置用法,感興趣的朋友們,可以去查閱其相關(guān)的資料。

 
 
 
  1.  
  2.              
  3.                 3.0.4 
  4.              
  5.              
  6.              
  7.                 6.0 
  8.              
  9.              
  10.                  
  11.                 true 
  12.                  
  13.                     junit:junit 
  14.                  
  15.                 must use TestNG 
  16.              
  17.          

(2) 配置好插件后進(jìn)行項(xiàng)目構(gòu)建,當(dāng)存在包沖突時(shí)會(huì)在console中打印出來(lái)。

(3) 依據(jù)信息便可將不需要的jar包通過(guò) 排除掉。

2. Maven Helper

使用IntelliJ IDE的Maven helper插件方便找到和排除沖突的依賴(lài)項(xiàng)

(1) command+, 打開(kāi)工具的設(shè)置窗口

(2) 設(shè)置搜索中輸入plugin

(3) 在Marketplace table頁(yè)面中搜索Maven Helper,并安裝

(4) 重啟后即可使用,打開(kāi)pom文件后,文件下面會(huì)多出Dependency Analyzer這一個(gè)tab,進(jìn)入Dependency Analyzer視圖之后有三個(gè)查看選項(xiàng),分別是Conflicts(沖突)、All Dependencies as List(列表形式查看所有依賴(lài))、All Dependencies as Tree(樹(shù)結(jié)構(gòu)查看所有依賴(lài))。通過(guò)查看信息后再做出對(duì)應(yīng)的依賴(lài)沖突處理。

總結(jié)

關(guān)于依賴(lài)沖突解決方式有三種:最短路徑原則、聲明優(yōu)先原則、依賴(lài)排除。在沒(méi)有手動(dòng)進(jìn)行依賴(lài)排除的情況下,會(huì)依據(jù)最短路徑原則、聲明優(yōu)先原則來(lái)選擇jar包。關(guān)于依賴(lài)沖突排查可借助如maven-enforcer-plugin 與Maven Helper 插件。根據(jù)實(shí)際情況及環(huán)境,選擇組合最優(yōu)的解決方案解決依賴(lài)沖突問(wèn)題。


文章名稱(chēng):Maven中jar包沖突原理及解決的方式
標(biāo)題來(lái)源:http://www.5511xx.com/article/dhiodco.html