maven依賴導致包重復加載及沖突


maven中配置 pom時,有時配置添加一個 jar卻會自動導入多個 jar包,往往這些自動導入的 jar包會與我們項目中已存在的 jar包重復,從而導致沖突。由於這些 jar包不是我們自己配置的,所以遇到這種問題往往感覺一頭霧水,下面記錄一下開發情況中遇到的這類問題。

由於添加一個功能需要在項目中導入如下一個jar包

  <dependency>
        <groupId>commons-httpclient</groupId>
            <artifactId>commons-httpclient</artifactId>
            <version>3.1</version>           
   </dependency>  

但在導入之后,原先正常的代碼突然有一個地方報錯

Base64類是通過如下引入的

import org.apache.commons.codec.binary.Base64;

可以看到問題出在 commons.codec 包上,應該是有多余的重復jar包和它沖突了,查看Maven倉庫果然如此,導入commons-httpclient包的同時導入了兩個依賴jar包——》commons-logging-1.0.4.jar、commons-codec-1.2.jar。

打開pom.xml文件,在Dependency Hierarchy(依賴列表)中查看jar包的依賴層次關系。在過濾欄中輸入commons-codec,左側出現了commons-codec相關包的依賴結構,右側則是pom.xml全部依賴包的列表展示。

直接在左側選中 commons-httpclient 底下的commons-codec 的jar包,右鍵選擇Exclude Maven Artifact...,然后保存pom.xml。問題解決。

保存之后,該引入在pom中顯示如下(為防止沖突,這里把commons-logging包的依賴也移除了)

<dependency>
        <groupId>commons-httpclient</groupId>
            <artifactId>commons-httpclient</artifactId>
            <version>3.1</version>
            <exclusions>
                <exclusion>
                    <artifactId>commons-codec</artifactId>
                    <groupId>commons-codec</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>commons-logging</artifactId>
                    <groupId>commons-logging</groupId>
                </exclusion>
            </exclusions>
</dependency>  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM