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>