当前位置: 首页 > article >正文

MAVEN解决版本依赖冲突

文章目录

  • 一、依赖冲突概念
    • 1、什么是依赖冲突
    • 2、依赖冲突的原因
    • 3、如何解决依赖冲突
  • 二、查看依赖冲突-maven-helper
    • 1、安装
    • 2、helper使用
      • 1、conflicts的阅读顺序(从下向上看)
      • 2、dependencies as List的阅读顺序(从下向上看)
      • 3、dependencies as Tree阅读(从上向下看)
  • 三、解决依赖冲突
    • 1、排除指定版本(常用,推荐)
      • 1、查看冲突
      • 2、排除不需要的版本
      • 3、查看pom依赖,刷新pom后
      • 4、再次点击【conflicts】,或者点击【Refresh UI】进行刷新
    • 2、使用第一声明者优先原则
    • 3、锁定版本(推荐)
    • 总结

一、依赖冲突概念

1、什么是依赖冲突

依赖冲突是指项目依赖的某一个jar包,有多个不同的版本,因而造成类包版本冲突,从而导致调试过程中出现类似类找不到,NoSuchMethodError等错误。
在这里插入图片描述

2、依赖冲突的原因

依赖冲突很经常是类包之间的间接依赖引起的。每个显式声明的类包都会依赖于一些其它的隐式类包,这些隐式的类包会被maven间接引入进来,从而造成类包冲突

3、如何解决依赖冲突

首先查看产生依赖冲突的类jar,其次找出我们不想要的依赖类jar,手工将其排除在外就可以了。

二、查看依赖冲突-maven-helper

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

1、安装

在这里插入图片描述

2、helper使用

1、当Maven Helper 插件安装成功后,打开项目中的pom文件,下面就会多出一个图
在这里插入图片描述
2、打开pom文件,并可以切换tab,简单使用
在这里插入图片描述

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

1、conflicts的阅读顺序(从下向上看)

从图中可以看出有哪些jar存在冲突,存在冲突的情况下最终采用了哪个依赖的版本。标红的就是冲突版本,白色的是当前的解析版本。这个选项,需要从下向上看;
并且这里是:A依赖于B,B依赖于C,C依赖D。
如下图:冲突的jar包就是jackson,swagger通过web、json最终依赖到jackson。
在这里插入图片描述

2、dependencies as List的阅读顺序(从下向上看)

dependencies as List 栏目和conflicts一样,都是从下向上看,依次依赖。
在这里插入图片描述

3、dependencies as Tree阅读(从上向下看)

datascope依赖securlty,再依赖system,再依赖core,再依赖到jackson
在这里插入图片描述

三、解决依赖冲突

1、排除指定版本(常用,推荐)

1、查看冲突

点击【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 排除定位到的冲突包。
    在这里插入图片描述

2、排除不需要的版本

通过上边的图,我们一刻看到最终选择了【4.2.4】版本,如果我要使用【5.0.12】版本。那么只需要吧【4.2.4】给排除掉。点击【Exclude】进行排除即可。
在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

2、使用第一声明者优先原则

谁先定义的就用谁的传递依赖,即在pom.xml文件自上而下,先声明的jar坐标,就先引用该jar的传递依赖。因此我们如果要使用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>

3、锁定版本(推荐)

使用dependencyManagement 进行版本锁定,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>

总结

综上就是maven如何排查依赖冲突以及解决方法,

  • 对于排查依赖个人比较推荐使用maven helper插件,
  • 至于解决依赖冲突个人推荐使用版本锁定的方法,此外dependencyManagement只是声明依赖,并不自动实现引入,因此子项目需要显示的声明需要用的依赖

相关文章:

MAVEN解决版本依赖冲突

文章目录 一、依赖冲突概念1、什么是依赖冲突2、依赖冲突的原因3、如何解决依赖冲突 二、查看依赖冲突-maven-helper1、安装2、helper使用1、conflicts的阅读顺序&#xff08;从下向上看&#xff09;2、dependencies as List的阅读顺序&#xff08;从下向上看&#xff09;3、de…...

地基注解@Controller和@RestController区别

前记&#xff1a;基础啊&#xff0c;区别点重点理解&#xff1b; 在Spring和Spring Boot框架中&#xff0c;Controller和RestController都用于处理HTTP请求&#xff0c;但它们在设计目的和用法上有显著区别。以下是它们的核心区别及示例说明&#xff1a; ​1. 核心区别 特性C…...

Linux Bash 单命令行解释 | 文件操作 / 字符串操作 / 重定向

注&#xff1a;本文为 “Linux Bash” 相关文章合辑。 中文引文&#xff0c;未整理。 英文引文&#xff0c;机翻未校。 第一部分&#xff1a;文件操作 1. 清空文件&#xff08;清除文件大小为 0&#xff09; $ > file这行命令使用输出重定向操作符 >。输出重定向造成文…...

【零基础入门unity游戏开发——进阶篇】Unity Microphone类处理麦克风相关信息,录制音频并实时处理或保存录制的音频数据

考虑到每个人基础可能不一样,且并不是所有人都有同时做2D、3D开发的需求,所以我把 【零基础入门unity游戏开发】 分为成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】:主要讲解C#的基础语法,包括变量、数据类型、运算符、流程控制、面向对象等,适合没有编程基础的…...

在终端中用code命令打开vscode并加载当前目录了

注册code命令 启动 VSCode 编辑器,按 shift command p输入 shell command&#xff0c;选择 Install ‘code’ command in PATH 选项&#xff0c; 安装code 命令 此操作会把 code 命令添加到系统的环境变量里。 打开 iTerm2 终端 在 iTerm2 中&#xff0c;cd 代码库根目录, …...

无需 Docker 也能下载镜像!轻松获取 Docker 镜像文件!

背景问题 在日常开发或运维工作中&#xff0c;我们经常需要下载 Docker 镜像&#xff0c;但可能会遇到以下问题&#xff1a; &#x1f539; 服务器无法访问 Docker Hub&#xff0c;导致 docker pull 失败。 &#x1f539; Windows 端没有安装 Docker&#xff0c;但仍然需要获…...

ESMFold对决AlphaFold:蛋白质-肽相互作用预测的新进展

今天向大家介绍的这篇文章题目为&#xff1a;“Protein−Peptide Docking with ESMFold Language Model”&#xff0c;近期发表在JCTC上。 本文主要研究 ESMFold 语言模型在蛋白质-肽对接中的应用。通过探索多种对接策略&#xff0c;评估其在预测蛋白质-肽相互作用方面的性能&a…...

win终端添加git-bash,支持linux的shell语法

git的git-bash支持很多linux的语法&#xff0c;比如ll&#xff0c;rm等等&#xff0c;用着很方便&#xff0c;比cmd、ps用着习惯 点击下箭头&#xff0c;设置 添加新配置 配置 地址为git地址\bin\bash.exe&#xff0c;不要用根目录的git-bash.exe&#xff0c;这个会打开新弹窗后…...

wpf中DataGrid组件每一行的背景色动态变化

背景描述&#xff1a;存在多个轧辊&#xff0c;其中有的轧辊是成对的&#xff0c;成对的辊ROLL_NO这个变量的值相同&#xff0c;有的轧辊是单个暂时没有配对的。成对的辊北京颜色交替突出显示&#xff0c;单个辊不需要设置背景色。 实现&#xff1a; 换辊的时候给成对的辊分配相…...

002-告别乱码-libiconv-C++开源库108杰

本课文包含三个视频&#xff01; 为什么中文版Windows是编程出现乱码的高发地带&#xff1f;怎么用 libiconv 把国标编码的汉字转换成宇宙统一码&#xff1f;怎么简化 libiconv 那些充满坑的 纯C 函数API&#xff1f; 1. 安装 libiconv 通常&#xff0c;你在 MSYS2 中安装过 G…...

DeepSeek赋能智慧交通:城市交通流量智能预测与优化,开启智能出行新时代

在数字化转型的浪潮中&#xff0c;智慧交通正成为提升城市运行效率、改善居民出行体验的关键领域。 DeepSeek作为人工智能领域的前沿技术&#xff0c;凭借其强大的数据分析、智能决策和多模态交互能力&#xff0c;正在为智慧交通注入新的活力&#xff0c;推动交通管理从“经验…...

Token登录授权、续期和主动终止的方案(Redis+Token(非jwtToken))

1、RedisToken方案的授权 1.1 基本原理 登录后使用UUID生成token&#xff0c;前端每次请求都会带上这个token作为授权凭证。这种方案是能自动续签&#xff0c;也能做到主动终止。所以很多项目用的都是RedisToken方案&#xff0c;简单方便问题少。缺点就是需要依赖Redis和数据…...

强大的数据库DevOps工具:NineData 社区版

本文作者司马辽太杰&#xff0c; gzh&#xff1a;程序猿读历史 在业务快速变化与数据安全日益重要的今天&#xff0c;生产数据库变更管理、版本控制、数据使用是数据库领域的核心挑战之一。传统的解决方式往往采用邮件或即时通讯工具发起审批流程&#xff0c;再通过堡垒机直连数…...

【蓝桥杯速成】| 1.暴力解题

1高频考点与暴力解题_哔哩哔哩_bilibili 感谢up主分享&#xff0c;以下内容是学习笔记&#xff0c;以c为主&#xff0c;部分python 题目一&#xff1a;维纳的年龄 题目内容 美国数学家维纳(N.Wiener)智力早熟&#xff0c; 11岁就上了大学。他曾在1935~1936年应邀来中国清华大…...

【动态规划篇】1137. 第 N 个泰波那契数

前言&#xff1a; 动态规划问题一般分为五步&#xff1a; 先确定一个状态表示根据状态表示来推导状态方程初始化填表顺序返回值 ①状态表示 先创建一个以为数组&#xff0c;起名为dp,这个一维数组就叫做dp表 把dp表填满&#xff0c;填满后的某个值就是我们想要的结果状态表…...

MySQL事务深度解析:ACID特性、隔离级别与MVCC机制

引言 在数据库系统中&#xff0c;​事务是保障数据一致性与完整性的核心机制。MySQL通过ACID特性、多级隔离策略和MVCC&#xff08;多版本并发控制&#xff09;实现了高性能与高可靠性的平衡。本文将从底层原理出发&#xff0c;系统解析事务的四大特性、隔离级别的实现逻辑&am…...

网络信息安全专业(710207)网络安全攻防实训室建设方案

一、引言 随着信息技术的飞速发展&#xff0c;网络空间安全已成为国家安全的重要组成部分&#xff0c;对网络信息安全专业人才的需求日益增长。为满足网络信息安全专业&#xff08;专业代码710207&#xff09;的教学需求&#xff0c;提升学生在网络安全攻防领域的实践能力&…...

【Linux】:线程池

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家带来线程池相关的知识点&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入门到精通 数据结构…...

共享内存(System V)——进程通信

个人主页&#xff1a;敲上瘾-CSDN博客 进程通信&#xff1a; 匿名管道&#xff1a;进程池的制作&#xff08;linux进程间通信&#xff0c;匿名管道... ...&#xff09;-CSDN博客命名管道&#xff1a;命名管道——进程间通信-CSDN博客 目录 一、共享内存的原理 二、信道的建立 …...

ctfhub-HTTP协议

请求方式 它要我们使用CTF**B Method,其实就是ctfhub方式 我们直接抓包试一试&#xff0c;把GET改成CTFHUB,在发送到repeater 在repeater处点击发送&#xff0c;得到响应 302跳转 点击“give me flag"没有任何变化&#xff0c;我们抓个包试试 我们把它发送到repeater&…...

【TMS570LC4357】之工程创建

备注&#xff1a;具体资料请在官网海淘.TMS570LC4357资料 在线文档Hercules Safety MCU Resource Guide — Hercules Safety MCUs Documentation XDS100 Debug Probe (ti.com) Git https://git.ti.com/git/hercules_examples/hercules_examples.git https://git.ti.com/cgit/h…...

一种改进的Estimation-of-Distribution差分进化算法

为了充分利用差分进化&#xff08;DE&#xff09;的强大开发和estimation-of-distribution算法&#xff08;EDA&#xff09;的强大探索&#xff0c;提出了一种混合estimation-of-distribution算法的改进差分进化IDE-EDA。首先&#xff0c;提出了一种新的协同进化框架&#xff0…...

正则表达式(复习)

文章目录 一、[]: 一个字符集合二、{}: 重复次数三、特殊符号四、(): 分组五、python代码示例六、注意 正则表达式(regular expression)描述了一种字符串匹配的模式&#xff08;pattern&#xff09;&#xff0c;可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个…...

大数据学习(61)-Impala与Hive计算引擎

&&大数据学习&& &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 承认自己的无知&#xff0c;乃是开启智慧的大门 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一下博主哦&#x1f91…...

洛谷每日1题-------Day18__P1320 压缩技术(续集版)

题目描述 设某汉字由 NN 的 0 和 1 的点阵图案组成。 我们依照以下规则生成压缩码。连续一组数值&#xff1a;从汉字点阵图案的第一行第一个符号开始计算&#xff0c;按书写顺序从左到右&#xff0c;由上至下。第一个数表示连续有几个 0&#xff0c;第二个数表示接下来连续有…...

[数据结构]排序之希尔排序( 缩小增量排序 )

希尔排序法又称缩小增量法。希尔排序法的基本思想是&#xff1a; 先选定一个整数&#xff0c;把待排序文件中所有记录分成个 组&#xff0c;所有距离为的记录分在同一组内&#xff0c;并对每一组内的记录进行排序。然后&#xff0c;取&#xff0c;重复上述分组和排序的工 作。当…...

LORA中 软提示是什么

LORA中 软提示是什么 软提示的原理概述 软提示(Soft Prompt)是提示学习(Prompt Learning)中的一种技术,主要用于引导预训练语言模型在特定任务上的表现。传统的提示学习通常使用硬提示(Hard Prompt),也就是在输入文本中添加固定的离散文本,比如在情感分析任务里,在…...

问问 DeepSeek 什么是网络爬虫

在现代互联网时代&#xff0c;信息的获取和整理变得至关重要&#xff0c;而爬虫&#xff08;Web Crawler&#xff09; 是一种自动化工具&#xff0c;帮助我们从网页上提取数据。爬虫在新闻采集、商品比价、天气数据收集等方面应用广泛。 爬虫的工作原理 爬虫的基本工作流程如下…...

进程(下)【Linux操作系统】

文章目录 进程的状态R状态&#xff1a;S状态&#xff1a;D状态&#xff1a;T状态t状态Z状态&#xff1a;孤儿进程X状态&#xff1a; 进程的优先级如果我们要修改一个进程的优先级重置进程优先级 进程切换进程的调度 进程的状态 在内核中&#xff0c;进程状态的表示&#xff0c…...

Insar结合ISCE2,某一个文件进行并行-stackSentinel.py

stackSentinel.py 依次执行 run_01 到 run_15&#xff0c;记录各自的日志 并行执行 run_16 里的所有命令&#xff0c;仍然记录日志 不知道对不对&#xff0c;测试的时间有点长就给停了 #!/bin/bash# ✅ 适用于 WSL/Linux runfiles_path"/mnt/e/insar_order_test/Stack…...