成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Maven中jar包沖突原理及解決的方式

開發(fā) 前端
在poml文件中進(jìn)行包依賴時(shí),常存在引入一個(gè)jar包中默認(rèn)依賴了其他的jar包的情況。這樣很容易導(dǎo)致jar包沖突,從而產(chǎn)生一些詭異問題。下面我們將聊聊具體關(guān)于依賴沖突產(chǎn)生的原因、排查方式以及解決的方案。

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

[[284204]]

依賴傳遞的概念

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

Maven中jar包沖突原理及解決的方式

依賴沖突的概念

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

[[284206]]

依賴沖突該是怎么解決的?

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

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),這就是最短路徑原則。

Maven中jar包沖突原理及解決的方式

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

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

Maven中jar包沖突原理及解決的方式

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

  1. <dependency>  
  2.  <groupId>com.company.bepe</groupId>  
  3.  <artifactId>bepe-common</artifactId>  
  4.  <version>2.2</version>  
  5. </dependency>  
  6. <dependency>  
  7.  <groupId>om.company.bepe</groupId>  
  8.  <artifactId>bepe-dal</artifactId>  
  9.  <version>2.2</version>  
  10. </dependency>  

3. 依賴排除

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

Maven中jar包沖突原理及解決的方式

依賴沖突情況該怎么排查?

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

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

1. maven-enforcer-plugin插件

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

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

Maven中jar包沖突原理及解決的方式

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

  1. <rules> 
  2.             <requireMavenVersion> 
  3.                 <version>3.0.4</version> 
  4.             </requireMavenVersion> 
  5.             <!--要求JDK版本)--> 
  6.             <requireJavaVersion> 
  7.                 <version>6.0</version> 
  8.             </requireJavaVersion> 
  9.             <bannedDependencies> 
  10.                 <!--是否檢查傳遞性依賴(間接依賴)--> 
  11.                 <searchTransitive>true</searchTransitive> 
  12.                 <excludes> 
  13.                     <exclude>junit:junit</exclude> 
  14.                 </excludes> 
  15.                 <message>must use TestNG</message> 
  16.             </bannedDependencies> 
  17.         </rules> 

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

Maven中jar包沖突原理及解決的方式

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

Maven中jar包沖突原理及解決的方式

2. Maven Helper

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

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

Maven中jar包沖突原理及解決的方式

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

Maven中jar包沖突原理及解決的方式

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

Maven中jar包沖突原理及解決的方式

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

Maven中jar包沖突原理及解決的方式

總結(jié)

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

 

責(zé)任編輯:趙寧寧 來源: 今日頭條
相關(guān)推薦

2023-10-11 12:35:29

Maven

2018-05-18 10:22:39

沖突游戲服務(wù)器

2022-10-26 08:16:58

jar包依賴關(guān)系Maven

2020-02-12 16:58:15

JavaScript前端技術(shù)

2010-07-29 15:56:04

FlexSocket

2021-10-05 22:09:31

Jar加載機(jī)制

2011-08-23 09:35:23

MavenJava

2010-09-07 13:04:14

CSS Hack

2020-02-13 14:32:36

解決Maven沖突問題

2009-06-04 10:31:00

struts.jar詳解

2021-03-18 16:07:08

鴻蒙HarmonyOS應(yīng)用

2023-04-04 08:01:47

2021-03-03 07:53:23

CAScompare andABA問題

2009-06-30 17:16:43

jsp網(wǎng)站開發(fā)

2013-04-25 14:26:54

GridView

2011-06-01 09:20:10

軟件項(xiàng)目

2019-03-28 16:22:03

華為云

2021-01-15 08:37:28

JAR加載

2023-11-13 18:22:14

Docker開發(fā)

2021-10-26 13:18:52

Go底層函數(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 欧美片网站免费 | 国产成人精品一区 | 九九国产 | 免费观看色 | 欧美天堂 | 久久久成人网 | 久久久毛片 | 日韩中文字幕在线观看 | 免费看91| 午夜精品一区 | 亚洲精品九九 | 国产精品18久久久久久久 | 亚洲午夜精品一区二区三区他趣 | 国产一二区视频 | 中文字幕日韩欧美一区二区三区 | 日韩三级在线 | 欧美日韩在线观看视频网站 | 一级毛片免费完整视频 | 99国内精品久久久久久久 | 成人精品国产一区二区4080 | 操操操日日日 | 黄网站在线播放 | 伊人免费网| 国产在线a| 亚洲高清在线观看 | 精品国产一区二区三区久久久蜜月 | 99九色 | 青娱乐av| 久久久这里都是精品 | 国产一区 | 久久一区视频 | 91精品国产综合久久久久久漫画 | 韩日一区二区 | 成人在线观看亚洲 | 亚洲免费视频网址 | 91国内精品久久 | 国产精品黄视频 | 99re视频 | 久久91av| 久热精品在线观看视频 | 成人午夜在线 |