一、问题描述
在项目开发中使用Maven管理Jar包时,常常会遇到Jar包依赖冲突。其根本原因是不同Jar包引用了同一Jar包的不同版本,从而在代码调用时,无法确定使用的是哪个版本的Jarba包。
二、解决办法
解决这一问题的方法有多种,按照思路分为总结如下:
1、第一声明原则
在pom.xml配置文件中,如果有两个名称相同,版本的不同依赖声明,先写的会生效,所以先声明自己要用的版本。这里的名称相同,版本不同的依赖声明,既可以是直接依赖,也可以是传递依赖。
例如,b引用了a的0.0.1版本,c引用了b的0.0.2版本,如果我们想用的版本是0.0.1版本,那么可以将b的版本依赖放在c的前面。
2、路径优先原则
直接依赖优于传递依赖。如果传递依赖的Jar包版本冲突了,那么可以单独声明一个指定版本的依赖Jar包,即可解决冲突。例如,b引用了a的0.0.1版本,c引用了b的0.0.2版本,如果我们想用的版本是0.0.3版本,可以直接单独声明一个a的0.0.3版本。
3、排除原则
在发生传递依赖冲突时,如果依赖不是项目需要的,可以在对应的传递依赖声明中进行排除。例如,b引用了a的0.0.1版本,c引用了b的0.0.2版本,如果我们想用的版本是0.0.2版本,那么可以将b的版本依赖中排除a。
<dependency>
<groupId>com.test</groupId>
<artifactId>b</artifactId>
<version>b的版本号</version>
<exclusions>
<exclusion>
<artifactId>com.test</artifactId>
<groupId>a</groupId>
</exclusion>
</exclusions>
</dependency>