maven排除依赖冲突问题

今天碰到了一个诡异的问题。
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.RELEASEspring.version> 
<hibernate.version>5.0.7.Finalhibernate.version> 
<struts.version>2.3.24struts.version> properties> 
properties> 
 
<dependencyManagement> 
	<dependencies> 
		<dependency> 
			<groupId>org.springframeworkgroupId> 
			<artifactId>spring-contextartifactId>
			<version>${spring.version}version> 
		dependency> 
	dependencies>
 dependencyManagement>

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

2. 移除依赖

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

    <dependency>
        <groupId>org.apache.hadoopgroupId>
        <artifactId>zookeeperartifactId>
        <version>3.3.1version>
        <exclusions>
            <exclusion>
                <groupId>jlinegroupId>
                <artifactId>jlineartifactId>
            exclusion>
        exclusions>
    dependency>

3. 第一声明优先原则

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

4. 最短路径优先

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

你可能感兴趣的:(问题记录)