maven依赖jar包时版本冲突解决方案

jar包版本是以groupId+artifactId为坐标的,在groupId+artifactId相同的情况下version不同代码不同的版本,一般都是version的不同导致的jar冲突。
同一个产品除非是大版本的升级,否则groupId+artifactId一般不会变。
1、第一声明优先原则:
在自己的pom文件中,如果有两个名称相同但版本不同的依赖声明,那么先写的会生效。—开发在自己定义的pom文件中,一般不会发生此种情况。

2、路径优先原则:
直接以来(自己在pom中添加的依赖)优于间接依赖;比如自己在pom文件中添加了A 1.0, B 2.0 两个jar包依赖,B又依赖了A2.0,那么最终生效的是A 1.0

3、排除原则:
在间接依赖冲突时,可以将不需要的jar的间接依赖排除,从而解决冲突。
间接依赖的生效原则:先看层深,层级浅的生效;层深相同在看前后,谁先声明则生效。

	<dependency>
        <groupId>org.apache.struts</groupId>
        <artifactId>struts2-spring-plugin</artifactId>
        <version>2.3.24</version>
        <exclusions>
          <exclusion>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
          </exclusion>
        </exclusions>
    </dependency>

为了方便可以直接在IDEA中的可视化界面排除:点击pom文件,选择下边的Dependency Analyzer,可以搜索框输入jar名称,在需要排除的版本号上右键exclude即可。
在这里插入图片描述

4、版本锁定原则(推荐使用):
如果微服务较多,为了三方件版本归一,会在父pom中指定具体的依赖三方件的版本号,在服务中依赖父pom即可。
如果在间接依赖中的某些jar包在父pom中已经指定了对应的版本号,则在依赖树种此依赖的版本都会被刷成父pom中指定的版本;如果pom中没有指定此依赖,则此间接依赖的版本号还是其自身指定的版本号。

	<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>
    <!-- 锁定版本,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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值