commons-lang3 tifactId > 3.12 . 0 /version > ependency > org.apache.commons /groupId > commons-lang3 tifactId > 3.11 /ver" />
0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用Maven命令檢測(cè)重復(fù)的依賴關(guān)系

科技綠洲 ? 來(lái)源:Java技術(shù)指北 ? 作者:Java技術(shù)指北 ? 2023-10-07 16:36 ? 次閱讀

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

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

pom.xml中, 經(jīng)常引入各種不同的jar 包, 又會(huì)依賴其他的jar。特別是一些常用的工具庫(kù),比較容易出現(xiàn)版本沖突,例如,讓我們看下這個(gè)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 被引用了兩次,而且版本號(hào)也不一樣?,F(xiàn)在我們就來(lái)看看如何使用Maven命令來(lái)檢測(cè)這些重復(fù)的依賴關(guān)系。

依賴樹(shù)命令

讓我們?cè)诮K端運(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 版同時(shí)被引入進(jìn)來(lái)了,出現(xiàn)這種情況是因?yàn)镸aven選擇了pom.xml中后來(lái)出現(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
。。。

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

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

在上面的例子中,我們看到了如何檢測(cè)重復(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中加入這個(gè)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: Some Enforcer rules have failed. Look above for specific messages explaining why the rule failed.

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

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

總結(jié)

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 開(kāi)發(fā)
    +關(guān)注

    關(guān)注

    0

    文章

    359

    瀏覽量

    40769
  • 日志
    +關(guān)注

    關(guān)注

    0

    文章

    131

    瀏覽量

    10616
  • maven
    +關(guān)注

    關(guān)注

    0

    文章

    30

    瀏覽量

    3693
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Maven依賴沖突的幾種常用方法

    Maven依賴沖突是一個(gè)很常見(jiàn)的問(wèn)題,它通常發(fā)生在項(xiàng)目中有多個(gè)依賴包含相同庫(kù)的不同版本時(shí)。我這邊解決Maven依賴沖突的幾種常用方法如下:
    的頭像 發(fā)表于 09-30 11:11 ?796次閱讀
    <b class='flag-5'>Maven</b><b class='flag-5'>依賴</b>沖突的幾種常用方法

    關(guān)系代數(shù)和數(shù)據(jù)依賴概念

    關(guān)系代數(shù)和數(shù)據(jù)依賴概念 1 關(guān)系代數(shù)    1970年IBM公司的E.F.Cood博士在論文“一個(gè)通用關(guān)系式數(shù)據(jù)庫(kù)系統(tǒng)的模型”中首先提出了
    發(fā)表于 12-05 21:28

    怎么解決依賴關(guān)系中vi沖突?

    沖突項(xiàng)是Error Cluster From Error Code.vi。如果不在依賴關(guān)系中可以放進(jìn)項(xiàng)目庫(kù)中來(lái)解決同名沖突。在依賴關(guān)系中怎么解決?大神指教
    發(fā)表于 09-25 21:14

    Maven 配置指南

    Maven 配置指南http://bbs.edu118.com/forum.php?mod=viewthread&tid=263&fromuid=231(出處: 信盈達(dá)IT技術(shù)社
    發(fā)表于 08-28 15:08

    Linux下的Maven安裝方法

    關(guān)鍵步驟如下: 1. 下載Maven包. 2. 解壓Maven包. 3.配置Maven系統(tǒng)參數(shù),驗(yàn)證Maven是否正確安裝.
    發(fā)表于 07-23 08:01

    OK3399開(kāi)發(fā)板的程序的庫(kù)依賴關(guān)系是什么?

    我想知道OK3399開(kāi)發(fā)板的程序的庫(kù)依賴關(guān)系,發(fā)現(xiàn)objdump 、ldd、readelf、apt等命令都沒(méi)有,還有辦法查看嗎?
    發(fā)表于 12-30 07:31

    CAD中如何快速重復(fù)執(zhí)行命令?

    快速重復(fù)執(zhí)行命令主要是靠鼠標(biāo)右鍵或者是鍵盤(pán)上的空格以及上下方向鍵。 輸入OP命令打開(kāi)選項(xiàng)對(duì)話框,點(diǎn)用戶系統(tǒng)配置選項(xiàng)卡自定義右鍵單擊按鈕,默認(rèn)模式下無(wú)論是否選定對(duì)象,單
    發(fā)表于 10-23 17:04 ?1605次閱讀

    MyEclipse環(huán)境搭建Maven的開(kāi)發(fā)環(huán)境

    一:Maven的下載安裝 1、安裝環(huán)境:win7 旗艦版 + MyEclipse2014 2、前置條件:JDK (本人用的jdk1.8) 3、maven下載: 說(shuō)明:maven依賴于j
    發(fā)表于 11-28 16:13 ?1354次閱讀

    基于變量依賴關(guān)系模型的變量重要性度量綜述

    基于變量依賴關(guān)系模型的變量重要性度量綜述
    發(fā)表于 07-02 14:44 ?0次下載

    如何在IDEA中查看依賴關(guān)系

    Maven提供了mvn dependency:tree來(lái)查看依賴關(guān)系,而IDE往往提供了更加便利的方式,比如Eclipse或者IDEA都有類似的功能,這篇文章簡(jiǎn)單說(shuō)明一下如何在IDEA中查看
    的頭像 發(fā)表于 10-17 09:48 ?1.8w次閱讀

    如何理解Maven拉包原理,搞定Maven構(gòu)建項(xiàng)目

    依賴是我們?cè)谑褂?Maven 構(gòu)建項(xiàng)目時(shí)最常使用的功能,通過(guò)依賴標(biāo)簽,我們可以直接從Maven倉(cāng)庫(kù)中引入對(duì)應(yīng)的Jar包,無(wú)需手動(dòng)再將Jar添加到目錄下了,可謂是十分方便,不過(guò)我們除了使
    發(fā)表于 05-25 09:50 ?530次閱讀
    如何理解<b class='flag-5'>Maven</b>拉包原理,搞定<b class='flag-5'>Maven</b>構(gòu)建項(xiàng)目

    idea配置了maven但不顯示pom

    配置 Maven 是一個(gè)開(kāi)發(fā)者常見(jiàn)的任務(wù),通過(guò) Maven 可以更方便地管理項(xiàng)目依賴和構(gòu)建過(guò)程。在配置 Maven 的過(guò)程中,我們可能會(huì)遇到一些問(wèn)題,比如沒(méi)有正確顯示 pom 文件。本
    的頭像 發(fā)表于 12-06 14:17 ?2469次閱讀

    idea中maven無(wú)法解析插件是怎么回事

    Maven是一個(gè)軟件項(xiàng)目管理和理解工具,它使用一個(gè)項(xiàng)目對(duì)象模型(POM)文件來(lái)描述項(xiàng)目的結(jié)構(gòu)和依賴關(guān)系。Maven的目標(biāo)是簡(jiǎn)化項(xiàng)目的構(gòu)建過(guò)程,提高開(kāi)發(fā)人員的效率。 在
    的頭像 發(fā)表于 12-06 14:18 ?5523次閱讀

    idea如何添加maven

    Maven是一個(gè)開(kāi)源的項(xiàng)目管理工具,它提供了一種簡(jiǎn)單的方式來(lái)管理項(xiàng)目的依賴關(guān)系、構(gòu)建過(guò)程和發(fā)布部署。本文將詳細(xì)介紹如何將Maven添加到你的項(xiàng)目中,并使用它來(lái)管理你的項(xiàng)目。 第一步:安
    的頭像 發(fā)表于 12-06 14:56 ?1053次閱讀

    云服務(wù)器的maven怎么配置本地倉(cāng)庫(kù)?

    在云服務(wù)器上使用Maven時(shí),你可以配置本地倉(cāng)庫(kù)以緩存和管理依賴項(xiàng),以減少對(duì)中央倉(cāng)庫(kù)的依賴和加快構(gòu)建過(guò)程。以下是配置Maven本地倉(cāng)庫(kù)的步驟: 1、選擇本地倉(cāng)庫(kù)路徑: 在云服務(wù)器上選擇
    的頭像 發(fā)表于 02-22 16:59 ?434次閱讀