自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

不會還在為Jar包沖突發(fā)愁吧!!

開發(fā) 前端
本文中,我們學(xué)習(xí)了如何使用mvn dependency:tree和mvn dependency:analyze-duplicate命令檢測Maven中的重復(fù)依賴,還學(xué)習(xí)了如何使用Maven Enforcer插件,通過應(yīng)用內(nèi)置規(guī)則使包含重復(fù)依賴的構(gòu)建失敗。

大家好,我是指北君。

在我們平時的開發(fā)過程中,常常會遇到引入各種不同的 jar 包,然后引發(fā)的 Maven 依賴沖突,今天我們來學(xué)習(xí)下如何使用 Maven 命令檢測 pom.xml 中的重復(fù)依賴項。

為什么要檢測重復(fù)的依賴關(guān)系

在pom.xml中, 經(jīng)常引入各種不同的jar 包, 又會依賴其他的jar。特別是一些常用的工具庫,比較容易出現(xiàn)版本沖突,例如,讓我們看下這個pom.xml。

<project>
[...]
<dependencies>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.11</version>
</dependency>
</dependencies>
[...]
</project>

從上面的代碼中,commons-lang3 被引用了兩次,而且版本號也不一樣?,F(xiàn)在我們就來看看如何使用Maven命令來檢測這些重復(fù)的依賴關(guān)系。

依賴樹命令

讓我們在終端運(yùn)行 mvn dependency:tree的命令,看看輸出結(jié)果

$ mvn dependency:tree
[INFO] Scanning for projects...
[WARNING]
[WARNING] Some problems were encountered while building the effective model for com.javanorth:maven-duplicate-dependencies:jar:0
.0.1-SNAPSHOT
[WARNING] 'dependencies.dependency.(groupId:artifactId:type:classifier)' must be unique: org.apache.commons:commons-lang3:jar -
> version 3.12.0 vs 3.11 @ line 14, column 15
[WARNING]
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING]
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
[WARNING]
[INFO]
[INFO] -------------< com.javanorth:maven-duplicate-dependencies >--------------
[INFO] Building maven-duplicate-dependencies 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ maven-duplicate-dependencies ---
[WARNING] The artifact xml-apis:xml-apis:jar:2.0.2 has been relocated to xml-apis:xml-apis:jar:1.0.b2
[INFO] com.javanorth:maven-duplicate-dependencies:jar:0.0.1-SNAPSHOT
[INFO] \- org.apache.commons:commons-lang3:jar:3.11:compile
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.136 s
...

我們可以看到,commons-lang3 jar的3.11版和 3.12 版同時被引入進(jìn)來了,出現(xiàn)這種情況是因為Maven選擇了pom.xml中后來出現(xiàn)的依賴。

依賴關(guān)系analyze-duplicate命令

現(xiàn)在讓我們運(yùn)行 mvn dependency:analyze-duplicate,看看輸出輸出結(jié)果。

$ mvn dependency:analyze-duplicate
[INFO] Scanning for projects...
[WARNING]
[WARNING] Some problems were encountered while building the effective model for com.javanorth:maven-duplicate-dependencies:jar:0
.0.1-SNAPSHOT
[WARNING] 'dependencies.dependency.(groupId:artifactId:type:classifier)' must be unique: org.apache.commons:commons-lang3:jar -
> version 3.12.0 vs 3.11 @ line 14, column 15
[WARNING]
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING]
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
[WARNING]
[INFO]
[INFO] -------------< com.javanorth:maven-duplicate-dependencies >--------------
[INFO] Building maven-duplicate-dependencies 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.8:analyze-duplicate (default-cli) @ maven-duplicate-dependencies ---
[WARNING] The artifact xml-apis:xml-apis:jar:2.0.2 has been relocated to xml-apis:xml-apis:jar:1.0.b2
[INFO] List of duplicate dependencies defined in <dependencies/> in your pom.xml:
o org.apache.commons:commons-lang3:jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.835 s
。。。

我們注意到,WARNING和INFO日志語句都提到了重復(fù)依賴的存在。

如果存在重復(fù)的依賴,則構(gòu)建失敗

在上面的例子中,我們看到了如何檢測重復(fù)的依賴關(guān)系,但BUILD仍然是成功的,但這可能導(dǎo)致使用了不正確的 jar 版本。

使用[Maven Enforcer Plugin](https://maven.apache.org/enforcer/maven-enforcer-plugin/index.html),我們可以確保在存在重復(fù)依賴的情況下構(gòu)建不成功。

我們需要在pom.xml中加入這個Maven插件,并加入banDuplicatePomDependencyVersions規(guī)則。

<project>
[...]
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<id>no-duplicate-declared-dependencies</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<banDuplicatePomDependencyVersions/>
</rules>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
[...]
</project>

現(xiàn)在,該規(guī)則約束了我們的Maven構(gòu)建。

$ mvn verify
[INFO] Scanning for projects...
[WARNING]
[WARNING] Some problems were encountered while building the effective model for com.javanorth:maven-duplicate-dependencies:jar:0
.0.1-SNAPSHOT
[WARNING] 'dependencies.dependency.(groupId:artifactId:type:classifier)' must be unique: org.apache.commons:commons-lang3:jar -
> version 3.12.0 vs 3.11 @ line 14, column 14
[WARNING]
[INFO] -------------< com.javanorth:maven-duplicate-dependencies >--------------
[INFO] Building maven-duplicate-dependencies 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-enforcer-plugin:3.0.0:enforce (no-duplicate-declared-dependencies) @ maven-duplicate-dependencies ---
[WARNING] Rule 0: org.apache.maven.plugins.enforcer.BanDuplicatePomDependencyVersions failed with message:
Found 1 duplicate dependency declaration in this project:
- dependencies.dependency[org.apache.commons:commons-lang3:jar] ( 2 times )

[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-enforcer-plugin:3.0.0:enforce (no-duplicate-declared-dependencies) on project maven-duplicate-dependencie
s:

刪除重復(fù)的依賴關(guān)系

只要確定了重復(fù)的依賴關(guān)系,我們就需要在 pom.xml中刪除它們,只保留那些我們項目使用的唯一依賴關(guān)系。

總結(jié)

本文中,我們學(xué)習(xí)了如何使用mvn dependency:tree和mvn dependency:analyze-duplicate命令檢測Maven中的重復(fù)依賴,還學(xué)習(xí)了如何使用Maven Enforcer插件,通過應(yīng)用內(nèi)置規(guī)則使包含重復(fù)依賴的構(gòu)建失敗。

責(zé)任編輯:武曉燕 來源: Java技術(shù)指北
相關(guān)推薦

2015-12-29 13:53:14

BeeCloud云計算支付

2018-03-09 06:17:00

WiFi網(wǎng)絡(luò)無線

2010-06-24 09:38:42

Windows備份云平臺

2021-12-06 17:44:56

MHAMySQL高可用

2020-12-16 09:18:38

數(shù)據(jù)科學(xué)數(shù)據(jù)大數(shù)據(jù)

2022-10-28 09:51:18

PrintfLinux開發(fā)

2015-07-09 09:40:52

充電隨身充電器

2022-02-24 07:03:13

JavaScrip語言

2021-07-19 10:10:25

鴻蒙HarmonyOS應(yīng)用

2019-09-21 21:32:34

數(shù)據(jù)庫SQL分布式

2011-04-19 09:27:46

CSS表單

2020-04-20 10:51:26

TCP擁塞控制網(wǎng)絡(luò)協(xié)議

2015-07-09 11:32:26

AWSIaaS云計算

2019-12-01 22:08:04

Mavenjar包開發(fā)

2021-09-07 11:20:02

binlogMySQL數(shù)據(jù)庫

2021-08-04 08:31:10

MySQL數(shù)據(jù)庫日志

2021-10-05 22:09:31

Jar加載機(jī)制

2020-01-20 14:30:39

HTTP概念標(biāo)頭

2018-05-18 10:22:39

沖突游戲服務(wù)器

2018-09-04 05:05:29

點贊
收藏

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