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只是锁定版本并不自动实现引入,因此子项目需要显示的声明需要用的依赖

 

posted @ 2025-05-16 17:39  大数据从业者FelixZh  阅读(1603)  评论(0)    收藏  举报
大数据从业者