关于maven自动处理版本冲突的原则和调整依赖的方法

一、冲突的出现原因

使用pom.xml文件添加dependecy(依赖)的时候,虽然,我们定义的dependecy不可能存在同一个依赖有两个版本,但是由于依赖还会引用别的依赖,这个时候就会有依赖冲突的情况出现。比如我们的项目引入两个依赖A、B,而A还引入依赖C1.0,B引入依赖C2.0,这个时候就面临该用哪个版本的C的问题了。如下图所示。

《关于maven自动处理版本冲突的原则和调整依赖的方法》 依赖关系

二、maven如何自动解决冲突的依赖

maven解决版本冲突主要是两个原则。

  • 路径最短原则:如上图E1的路径是“项目-A-E1”,E2的路径是“项目-B-F-E2”,因为E1路径比E2短,所以最终会选择E1而不用E2。

  • 优先声明原则:当出现路径长短相同的时候,谁先声明就用谁。如F1和F2的路径距离相同,但是由于F1比F2先声明(B比C先声明),所以最终使用F1。

三、手动解决冲突

当然,有时maven的自动解决依赖冲突并不能满足我们的要求,这个时候就需要我们自己选择使用什么版本了。

1、在Intellij下如何查看冲突

打开pom.xml,在文件里,右键,如下图所式:

《关于maven自动处理版本冲突的原则和调整依赖的方法》 idea

红线部分就是有冲突并被舍弃的依赖。选择其中一个依赖,会看到所有相同依赖的不同版本都会被 红虚线 连接起来。这些不同版本的依赖中一定会有一个与父依赖没有用红实线连接的,而是用正常的蓝线连接,这个就是被选择并使用的依赖。如下图:

《关于maven自动处理版本冲突的原则和调整依赖的方法》 idea

2、手动排除依赖

只需要在dependecy标签下,加入exclusions,如下

<dependency>  
      <groupId>net.sf.json-lib</groupId>  
      <artifactId>json-lib</artifactId>  
      <version>2.1</version>  
      <exclusions>  
        <exclusion>  
          <groupId>commons-lang</groupId>  
          <artifactId>commons-lang</artifactId>  
        </exclusion>  
      </exclusions>  
    </dependency> 
    原文作者:coder_farmer
    原文地址: https://www.jianshu.com/p/69489c266e13
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞