maven排除依赖冲突问题

本文讲述了在遇到Maven依赖冲突,尤其是升级jedis版本时遇到的问题及解决方案。首先介绍了依赖管理、移除依赖、第一声明优先原则和最短路径优先这四种解决依赖冲突的方法,并详细说明了如何通过这些方法成功将jedis版本从2.9.0更新到3.0.1。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天碰到了一个诡异的问题。
jedis版本原来用的是2.9.0,想要替换成3.0.1,涉及到父pom,搞了半天,试了各种办法,版本都改不过来。
项目依赖的始终是2.9.0,并且从当前pom到父pom,都找不到在哪里指定了2.9.0。

最终,采取下述方法1,问题解决。

maven依赖冲突一般有四种解决方式,按照优先级(从高到低)介绍:

1. 依赖管理(所有版本锁定)

在配置文件pom.xml中先声明要使用哪个版本的相应jar包,声明后其他版本的jar包一律不依赖

<properties> 
<spring.version>4.2.4.RELEASE</spring.version> 
<hibernate.version>5.0.7.Final</hibernate.version> 
<struts.version>2.3.24</struts.version> </properties> 
</properties> 
<!-- 锁定版本,struts2-2.3.24、spring4.2.4、hibernate5.0.7 --> 
<dependencyManagement> 
	<dependencies> 
		<dependency> 
			<groupId>org.springframework</groupId> 
			<artifactId>spring-context</artifactId>
			<version>${spring.version}</version> 
		</dependency> 
	</dependencies>
 </dependencyManagement>

如果是应用在同一个工程内有多个模块时,提取出一个父亲模块来管理子模块共同依赖的 jar 包版本,则子模块相同jar包不需要指定version信息

2. 移除依赖

如果我们不想通过 A->B->C>D1 引入 D1 的话,那么我们在声明引入 A 的时候将 D1 排除掉
举个例子:将 zookeeper 的 jline 依赖排除

    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>zookeeper</artifactId>
        <version>3.3.1</version>
        <exclusions>
            <exclusion>
                <groupId>jline</groupId>
                <artifactId>jline</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

3. 第一声明优先原则

在pom.xml配置文件中,如果有两个名称相同版本不同的依赖声明,那么先写的会生效。
所以,先声明自己要用的版本的jar包即可。

4. 最短路径优先

直接依赖优先于传递依赖,如果传递依赖的jar包版本冲突了,那么可以自己声明一个指定版本的依赖jar,即可解决冲突。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值