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>