idea maven helper插件 解决版本依赖冲突
安装Maven Helper插件,就可以打开pom文件的Dependency Analyzer视图,视图三个选项分别是Conflicts(冲突)、All Dependencies as List(列表形式查看所有依赖)、All Dependencies as Tree(树结构查看所有依赖)。页面还支持搜索。很方便!
1、安装

2、helper使用
打开项目中的pom文件,使用Dependency Analyzer视图


Conflicts(查看冲突)
All Dependencies as List(列表形式查看所有依赖)
All Dependencies as Tree(树形式查看所有依赖)
当前界面上还提供搜索功能 方便使用
conflicts的阅读顺序(从下向上看)
从图中可以看出有哪些jar存在冲突,存在冲突的情况下最终采用了哪个依赖的版本。标红的就是冲突版本,白色的是当前的解析版本。这个选项,需要从下向上看;
并且这里是:A依赖于B,B依赖于C,C依赖D。
如下图:冲突的jar包就是jackson,swagger通过web、json最终依赖到jackson。

3. 解决依赖冲突
点击【Conflicts】,从图中可以看到那些jar包冲突。标红的就是冲突版本,白色的是当前的解析版本。
如果有多个依赖的版本发生了冲突,只需要使用exclusion关键字对相关依赖进行排除就行。
这里可以看到 spirng-beans-4.2.4.release和spring-beans-5.0.12冲突,这里舍弃spirng-beans-4.2.4.release这个版本,保留spring-beans-5.0.12 这个版本。使用 exclusion 排除定位到的冲突包。

可以看到最终选择了【4.2.4】版本,如果我要使用【5.0.12】版本。那么只需要吧【4.2.4】给排除掉。点击【Exclude】进行排除即可。

再次点击【conflicts】,或者点击【Refresh UI】进行刷新

除了exclude,还有如下方法:
第一声明者优先原则
谁先定义的就用谁的传递依赖,即在pom.xml文件自上而下。
因此如果要用5.2.0版本的spring core包,可以改成如下声明
  <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>5.2.0.RELEASE</version>
        </dependency>
        
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.7.RELEASE</version>
        </dependency>
    </dependencies>
锁定版本(推荐)
dependencyManagement可以统一管理项目的版本号,导入依赖的时候就会直接使用我们锁定的依赖版本。
(1)在父项目的pom中进行约定
<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <version>5.2.0.RELEASE</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
这样在后续的子工程中,就不用写版本号了,直接就沿用父项目的版本号
(2)在同一个项目pom中,既约定版本号,又导入依赖
<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <version>5.2.0.RELEASE</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.7.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>5.2.0.RELEASE</version>
        </dependency>
    </dependencies>
dependencyManagement只是锁定版本并不自动实现引入,因此子项目需要显示的声明需要用的依赖
 
                    
                     
                    
                 
                    
                
 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号