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

news2024/10/7 12:17:48

1、第一声明优先原则

在pom.xml配置文件中,如果有两个名称相同版本不同的依赖声明,那么先写的会生效。

所以,先声明自己要用的版本的jar包即可。
所以,添加新依赖时要放在最后边,以防止新依赖替换原有依赖造成版本冲突。

2、路径近者优先

直接依赖优先于传递依赖,如果传递依赖的jar包版本冲突了,那么可以自己声明一个指定版本的依赖jar,即可解决冲突。

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>

4、版本锁定原则(最常使用)

在配置文件pom.xml中先声明要使用哪个版本的相应jar包,声明后其他版本的jar包一律不依赖。解决了依赖冲突。

<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>

5、查看jar包的间接依赖

如果发现某个jar包,自己的pom中并没有定义,想看一下是被哪个jar包间接引用的,执行以下命令,直接输出到当前项目下,然后在idea中打开,搜索要找的jar包名字即可。这里的 “±” 和"-"并没有什么意义,只是为了让分级看起来更直观。

mvn dependency:tree>temp

在这里插入图片描述

如果想看冲突和重复的具体情况,用verbose参数

mvn dependency:tree -Dverbose -Dincludes=[commons-collections]

因此,我们可以看到Commons Collections 2.0被选为2.1,因为它离它更近,并且默认情况下,Maven使用最近赢得策略解决版本冲突。

6、排包

在这里插入图片描述

如图可知jai_core是在icepdf-core被间接引用的,如果jai_core的间接引入造成了依赖冲突,可在icepdf-core使用如下方式排出

org.icepdf.os icepdf-core 6.2.2
<exclusions>
    <exclusion>
        <groupId>javax.media</groupId>
        <artifactId>jai_core</artifactId>
    </exclusion>
</exclusions>

7、处理jar包依赖冲突总结

简介:处理jar包依赖冲突,首先,对于多个jar包都引用同一jar包的情况,最好是在程序中显式定义被共同引用的jar包的依赖,来统一版本号,方便维护

如果A和B都依赖同一jar包C,可能会出现两种情况

A和B引用的C版本相同,这时按照pom定义顺序选择第一个即可,没有冲突问题,如果在项目的maven中显示定义了C依赖,那么用选择项目定义的依赖,反正version都一样,没有影响

A和B依赖的C版本不同,选择版本高的那个,这时会出现两种结果

(1) 高版本兼容低版本,所以不会出现问题
(2)高版本不兼容低版本,假如A依赖C2版本,B依赖C3版本,C3不兼容C2,maven选择了高版本C3,对A来说会出现问题​

有3种解决方法[1] [2]如果B版本也可依赖C2,在项目的maven中显示定义对C2的依赖,这样所有都使用C2版本[3]如果B版本不支持C2版本,只能降低B版本,找到依赖C2的B版本从功能性和可维护性考虑,高版本提供的功能更多,bug更少,优先考虑1再考虑2最后考虑3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/499421.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mybatis基础操作XML映射文件

Mybatis基本操作 一、环境准备 数据库表和springboot工程在课程资料中都有提供 注意&#xff0c;entrydate是用的jdk1.8中的LocalDate类型&#xff0c;createTime用的是jdk1.8中的LocalDateTime类型 二、删除 Mybatis中提供了一种参数占位符 #{id} empMapper.java package…

Leetcode461. 汉明距离

Every day a leetcode 题目来源&#xff1a;461. 汉明距离 解法1&#xff1a;模拟 先将x和y转为为对应二进制的字符串&#xff0c;再遍历两个字符串进行比较。 代码&#xff1a; /** lc appleetcode.cn id461 langcpp** [461] 汉明距离*/// lc codestart class Solution {…

HTML的两个实战项目

文章目录 HTML的两个实战项目1. 个人简历1. 1 快速生成模板1.2 根据简历格式进行预设计1.3 开始创作吧1.3.1 基本信息1.3.2 教育背景1.3.3 专业技能1.3.4 我的项目1.3.5 自我评价 2. 输入简历信息页面设计2.1 设计大概框架2.2 开始创作吧2.2.1 输入姓名2.2.2 上传照片2.2.3 输入…

Axure教程——用中继器制作动态柱状图

今天作者就教大家在Axure里面如何用中继器做一个可以动态的柱状图。 制作完成之应具备以下交互效果&#xff1a; 1.在中继器表格中填写具体数据和坐标轴后&#xff0c;自动生成对应的柱状图 2.鼠标移动到每项&#xff0c;显示其数据 预览地址&#xff1a;https://tj4v11.axshar…

node笔记_读文件(异步读取、流式读取)

文章目录 ⭐前言⭐ 读取文件异步读 readFile读取txt 流式读 createReadStream读取视频 ⭐ 结束 ⭐前言 大家好&#xff0c;我是yma16&#xff0c;本期分享node读取文件。 往期文章 node_windows环境变量配置 node_npm发布包 linux_配置node node_nvm安装配置 node笔记_http服务…

2023/05/02~07 刷题记录

A - AABCC 题义&#xff1a; 题解&#xff1a; 读完题目可以想到直接暴力&#xff0c;但是肯定超时别想了。 因为 a b c 都是素数&#xff0c;所以我们可以先求出所有的素数 进行减少循环的次数&#xff0c;然后遍历。在遍历过程中&#xff0c;我们也要去进行剪枝 &#xff0c;…

10_Uboot启动流程_2

目录 _main函数详解 board_init_f函数详解 relocate_code函数详解 relocate_vectors函数详解 board_init_r 函数详解 _main函数详解 在上一章得知会执行_main函数_main函数定义在文件arch/arm/lib/crt0.S 中,函数内容如下: 第76行,设置sp指针为CONFIG_SYS_INIT_SP_ADDR,也…

美团外卖红包优惠券:美团外卖节红包或美团外卖天天神券怎么领取使用?

什么是美团外卖节红包或美团外卖天天神券&#xff1f; 美团外卖节红包、美团外卖天天神券都可以称为美团外卖红包优惠券。使用美团外卖节红包、美团外卖天天神券&#xff0c;点餐可以享受优惠。且美团外卖节红包、美团外卖天天神券每天都可以免费领取。美团会员红包不能与美团…

nginx相关知识

目录 一. Nginx目录结构 二. Nginx配置文件结构 三. Nginx具体应用 1. 部署静态资源 2. 反向代理 3. 负载均衡 一. Nginx目录结构 重点目录/文件&#xff1a; conf/nginx.conf nginx配置文件html 存放静态文件&#xff08;html、CSS、Js等&#xff09;logs 日志目…

【Redis】数据结构底层结构

我们知道Redis的很快&#xff0c;一个原因是因为在内存上操作&#xff0c;另一个原因是本身的数据结构。而具体的五大类型就是如下&#xff1a; 键和值如何组织的 通过key找到value的过程&#xff0c;Redis使用了哈希表结构进行查找。具体就是根据key的hash值计算出对应的下…

三子棋(C语言重做版)

&#x1f929;本文作者&#xff1a;大家好&#xff0c;我是paperjie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 &#x1f970;内容专栏&#xff1a;这里是《C语言》专栏&#xff0c;笔者用重金(时间和精力)打造&#xff0c;基础知识一网打尽&#xff0c;希望可以…

对标ChatGPT3.5,支持手机电脑网页使用,无需魔法

说到 Claude 是什么&#xff0c;大家可能没听说过。 但是说到 OpenAI&#xff0c;说到 ChatGPT&#xff0c;相信大家一定听说过&#xff0c;玩过。 PS&#xff1a;关于 Claude 网页版的注册教程&#xff0c;我之前已经写过文章了&#xff0c;现在额外介绍如何使用手机App和电脑…

centos搭建code-server及配置HTTPS、登录页自定义

文章目录 一、Code-Server二、安装及运行三、系统配置四、HTTPS配置五、登录页面自定义 注&#xff1a;本版本基于4.11.0&#xff0c;在此之前版本&#xff0c;在centos上会出现CPU占用一直100%的情况&#xff0c;当前版本已经搭建两个月&#xff0c;综合下来比较稳定 通过搭建…

【高数+复变函数】傅里叶级数

文章目录 1. 傅里叶级数1.1 和差化积积化和差1.2 三角函数系的正交性1.3 系数公式求解1.4 展开条件1.5 变形下的傅里叶 在课程学习中&#xff0c;感觉这一部分的东西频繁会被用到&#xff0c;因此写下来做个总结。 1. 傅里叶级数 在科学技术中&#xff0c;常常会遇到各种各样的…

【matplotlib】4-完善统计图形

文章目录 完善统计图形1 添加图例和标题1.1 图例和标题的设置方法1.2 案例1--图例的展示样式的调整1.3 案例2--标题的展示样式的调整1.4 案例3--带图例的饼图 2 调整刻度范围和刻度标签2.1 调整刻度范围和刻度标签的方法2.2 子区函数--subplot()2.3 案例--逆序设置坐标轴刻度标…

密码学:公钥密码.(非对称密码)

密码学&#xff1a;公钥密码. 公钥密码 (Public Key Cryptography)&#xff0c;又称为非对称密码&#xff0c;其最大特征是加密和解密不再使用相同的密钥&#xff0c;而使用不同的密钥。使用者会将一个密钥公开&#xff0c;而将另一个密钥私人持有&#xff0c;这时这两个密钥被…

【WebGIS初学到入职】第二阶段的小结

一、前言 2021年12月&#xff0c;我进行了【WebGIS初学到入职】第一阶段的小结&#xff0c;如今&#xff0c;一年半过去了。我完成了毕业设计&#xff0c;平缓得通过了岗位的试用期&#xff0c;而且作为我所在部门唯一的前端开发&#xff0c;参与了越来越多的工作项目。 同时…

源码分析RocketMQ之NameServer

整体架构图 从部署架构图可知NameServer与所有的broker通讯&#xff0c;NameServer集群之间互不通信。 主要功能包括 1、Broker管理 1.1 维护Broker集群 clusterAddrTable 1.2 Broker信息 接收Broker注册信息并保存作为路由信息的基本数据 brokerAddrTable 1.3 Topic消息路由…

【软件质量保证与测试】实验二之ACTS工具

索引 0. 前言1. ACTS 获取2. ACTS 启动2.1 双击启动GUI2.2 终端启动GUI2.3 进入GUI 3. ACTS 参数类型3.1 新建系统3.2 ACTS 添加成员3.2.1 Boolean类型3.2.2 Enum类型3.2.3 Number类型3.2.4 Range类型3.2.5 其他 4. ACTS 约束5. 混合组合强度6. 参考模型6.1 设定模型6.2 参数设…

Win系统软件闪屏 - 解决方案

Win系统软件闪屏 - 解决方案 前言原因解决方案方法1&#xff1a;软件使用独显方法2&#xff1a;软件关闭硬件加速方法3&#xff1a;降级显卡驱动 前言 使用Win10及以上系统时&#xff0c;可能会出现频繁闪现黑屏的状态&#xff0c;下文简称闪屏。一般在使用第三方软件时&#…