如何使用maven-helper插件解决jar包冲突问题

 更新时间:2024年05月22日 11:02:31   作者:健康平安的活着  
安装了Maven Helper插件,只要打开pom文件,就可以打开该pom文件的Dependency Analyzer视图,这篇文章主要介绍了使用maven-helper插件解决jar包冲突,需要的朋友可以参考下

一 mavenHelper插件的介绍安装

1.1 介绍

安装了Maven Helper插件,只要打开pom文件,就可以打开该pom文件的Dependency Analyzer视图(在文件打开之后,文件下面会多出这样一个tab),进入Dependency Analyzer视图之后有三个查看选项,分别是Conflicts(冲突)、All Dependencies as List(列表形式查看所有依赖)、All Dependencies as Tree(树结构查看所有依赖)。并且这个页面还支持搜索。很方便!

1.2 安装

1.在线安装:File-->setting--->Plugins--->在搜索框中填写Maven Helper然后搜索,单击Install按钮进行安装,装完重启IDE。

2.离线安装:点击“Plugins”->“Marketplace”->输入"mavn helper"->点击“install”->点击“OK”完成安装

1.3 helper的使用

1.当Maven Helper 插件安装成功后,打开项目中的pom文件,下面就会多出一个试图

2.helper的界面

打开pom文件,并可以切换tab,简单使用,如下图:

Conflicts(查看冲突)
All Dependencies as List(列表形式查看所有依赖)
All Dependencies as Tree(树形式查看所有依赖)
当前界面上还提供搜索功能 方便使用

二 jar包冲突说明

2.1 说明

首先,解决idea中jar包冲突,使用maven的插件:maven helper插件,它能够给我们罗列出来同一个jar包的不同版本,以及他们的来源,但是对不同jar包中同名的类没有办法。

2.2 依赖顺序

1.点击【All Dependencies as Tree】,查看:从上向下,A依赖于B,B依赖于C;starter依赖core,core依赖api

2.点击【Conflicts】,从图中可以看出有哪些jar存在冲突,存在冲突的情况下最终采用了哪个依赖的版本。标红的就是冲突版本,白色的是当前的解析版本。这个选项,需要从下向上看;

A依赖于B,B依赖于C,如下图:冲突的jar包就是dpscn-apass-oltp-plugin-api

2.3 解决思路

2.3.1 *排除指定的版本*

思想:如果有两个依赖的版本发生了冲突,那么只要把其中一个依赖给排除掉,只剩下一个依赖,那么自然就可以解决冲突的问题。我们只需要使用exclusion关键字对相关依赖进行排除就行

1.这里可以看到 spirng-beans-4.2.4.release和spring-beans-5.0.12冲突,这里舍弃spirng-beans-4.2.4.release这个版本,保留spring-beans-5.0.12 这个版本。使用 exclusion 排除定位到的冲突包。

2.在4.2.4版本侧选中【exclude】

3.查看pom依赖,刷新pom后

4.再次点击【conflicts】,可以看到关于spring-beans的冲突已经没有,现在使用的是spring-beans-5.0.12这个版本

2.3.2 子工程显示指定版本

显示单独声明使用依赖的版本

2.3.3 子工程中先排除,后指定版本

如下图,在starter-web中排除spring-webmvc,然后指定spring-webmvc的版本为6.0.9。

2.3.4 锁定版本

方案4:锁定版本,我们最常使用的解决方式,是使用dependencyManagement统一对依赖的版本进行定义。这样的话,导入依赖的时候就会直接使用我们锁定的依赖版本。

这里要注意两点,版本锁定和【使用路径优先原则不同,使用路径优先原则,是实实在在地将jar包给引入到pom文件中】,而版本锁定只是规定了要使用的版本号,只有真实用到了相关的依赖,才生效。同时,版本锁定可以更集中地约束和规定依赖版本,这种优势是其他方法所不能达到的。
当然了,如果只是简单的小型项目,使用其他方式可能是更好的解决方法。

https://www.jb51.net/program/318190efu.htm

三 案例

排除指定版本

3.1 冲突说明

1.冲突依赖描述

  <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>4.2.4.RELEASE</version>
      <exclusions>
        <exclusion>
          <artifactId>spring-beans</artifactId>
          <groupId>org.springframework</groupId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aop</artifactId>
      <version>5.0.12.RELEASE</version>
    </dependency>

2.说明:从下向上看

spring-aop 版本5.0.12版本

spring-webmvc4.2.4 依赖于spring-web 4.2.4 ,spring-web-4.2.4依赖于spring-aop4.2.4 版本

冲突版本:spring-aop:5.0.12 和spring-aop4.2.4 冲突

3.2 解决方法

排除掉spring-aop4.2.4这个版本,保留spring-aop:5.0.12 这个版本

查看maven坐标:在4.2.4-spirng-webmvc排除掉spring-aop4.2.4版本,刷新pom,重新拉包,如图

4.查看冲突已解决:再次点击【conflicts】查看aop的冲突已经没有了

四 案例:子工程指定具体版本

4.1 冲突说明

4.2 排除方法

在父工程中的pom文件中声明冲突依赖的具体版本。如图,这里指定:dpsn-appas-oltp-plugin-api的版本为1.0.0

五 案例 锁定版本*

5.1 冲突说明

锁定版本,我们最常使用的解决方式,是使用dependencyManagement统一对依赖的版本进行定义。这样的话,导入依赖的时候就会直接使用我们锁定的依赖版本。

这里在父工程的pom里面<dependecyManagement>中的<dependencies>标签中,指定使用版本

<dependency>
  <groupId>com.pab.dpscn</groupId>
  <artifactId>corebankpulltest-message</artifactId>
  <version>1.0.0-dev-test-SNAPSHOT</version>
</dependency>

详情见下图

5.2 解决方法

1.这里查看依赖要从上向下看:可以看到:

Clearingledger-ledger-1.0.0-snapshot依赖于Clearingledger-ledger-facade-1.0.0-snapshot

Clearingledger-ledger-facade-1.0.0-snapshot依赖于corebankpulltest-message-1.0.0-dev-snapshot

冲突版本为:corebankpulltest-message-1.0.0-dev-snapshot和corebankpulltest-message-1.0.0-dev-test-snapshot版本

2.解决办法:在父工程的dependencyManagement标签中锁定版本使用corebankpulltest-message:1.0.0-dev-test-snapshot版本

到此这篇关于使用maven-helper插件解决jar包冲突的文章就介绍到这了,更多相关maven-helper插件解决jar包冲突内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring中@PathVariable和@RequestParam注解的用法区别

    Spring中@PathVariable和@RequestParam注解的用法区别

    这篇文章主要介绍了Spring中@PathVariable和@RequestParam注解的用法区别,@PathVariable 是 Spring 框架中的一个注解,用于将 URL 中的变量绑定到方法的参数上,它通常用于处理 RESTful 风格的请求,从 URL 中提取参数值,并将其传递给方法进行处理,需要的朋友可以参考下
    2024-01-01
  • Java如何通过反射方式生成数据库实体类

    Java如何通过反射方式生成数据库实体类

    这篇文章主要介绍了Java如何通过反射方式生成数据库实体类问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • 基于IDEA查看maven依赖结构流程解析

    基于IDEA查看maven依赖结构流程解析

    这篇文章主要介绍了基于IDEA查看maven依赖结构流程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • java中加密的实现方法(MD5,MD2,SHA)

    java中加密的实现方法(MD5,MD2,SHA)

    这篇文章主要介绍了java中加密的实现方法(MD5,MD2,SHA)的相关资料,这里提供三种实现加密的方法,大家可以对比一下,需要的朋友可以参考下
    2017-08-08
  • 通过实例了解如何在JavaWeb实现文件下载

    通过实例了解如何在JavaWeb实现文件下载

    这篇文章主要介绍了通过实例了解如何在JavaWeb实现文件下载,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • 分析Java设计模式之组合模式

    分析Java设计模式之组合模式

    组合模式是一种对象的行为模式。将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。它的本质是统一叶子对象和组合对象。它的目的是让客户端不再区分操作的是组合对象还是叶子对象,而是以一个统一的方式来操作
    2021-06-06
  • Java中逆序遍历List集合的实现

    Java中逆序遍历List集合的实现

    本文主要介绍了Java中逆序遍历List集合的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • 使用JWT作为Spring Security OAuth2的token存储问题

    使用JWT作为Spring Security OAuth2的token存储问题

    这篇文章主要介绍了使用JWT作为Spring Security OAuth2的token存储,大家经常使用的方法有两种一种是使用JWT作为Token传递,一种是使用Redis存储Token,资源服务器本地访问Redis校验Token,需要的朋友可以参考下
    2021-12-12
  • JVM中判定对象需要回收的方法

    JVM中判定对象需要回收的方法

    这篇文章主要介绍了jvm中如何判定对象需要回收,jvm在确定是否回收的对象的时候采用的是root搜索算法来实现,需要的朋友可以参考下
    2022-04-04
  • Maven离线模式打包全过程

    Maven离线模式打包全过程

    这篇文章主要介绍了Maven离线模式打包全过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04

最新评论