Maven之dependencyManagement

article/2025/8/26 16:22:47

1. 父项目的dependencyManagement

最开始,知道dependencyManagement是管理jar包版本的,如果在父项目中的该节点下声明了包的版本,子项目中在Dependencies中引用该包时就不需要声明版本了,这样保证多个子项目能够使用相同的包版本。
dependencyManagement不实际下载jar包,只会声明包的版本。如果Dependencies中声明了包的版本,则会覆盖dependencyManagement声明的版本。

2. 解决包冲突

但是,除了上面简单理解的dependencyManagement,其实它更强大的功能是解决包冲突,很多教程也这么说,但是我一直以为是第一种情况那样,不用再声明包版本了,达到所有子项目包版本相同的目的,实际上,一个项目中,同时使用dependencyManagement和Dependencies,基本上就告别了使用exclusions一个一个排除包来解决包冲突的方法,这种方式以前并没有注意到,或者很多教程没有特别强调,但是这个才是dependencyManagement的方便之处。
起因是我使用如下jar包:

<properties><activitti.version>5.22.0</activitti.version><spring.redis.version>1.6.2.RELEASE</spring.redis.version><spring.vserion>4.1.5.RELEASE</spring.vserion>
</properties>
<dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-redis</artifactId><version>${spring.redis.version}</version>
</dependency>
...
<dependency><groupId>org.activiti</groupId><artifactId>activiti-spring</artifactId><version>${activitti.version}</version>
</dependency>

其中,spring-data-redis引入spring版本是4.1.9, 而activiti-spring引入的spring版本是4.1.5.
如下图所示:

两者引入的spring组件的版本各部相同,导致程序无法运行,此时第一反应是使用exclusions一个个排除冲突的jar包,操作十分麻烦,突然想到dependencyManagement,如果我把冲突的包放在其中,声明了版本,会怎么样,如下:

<dependencyManagement><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.vserion}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.vserion}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>${spring.vserion}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>${spring.vserion}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>${spring.vserion}</version></dependency></dependencies>
</dependencyManagement><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-redis</artifactId><version>${spring.redis.version}</version>
</dependency>
...
<dependency><groupId>org.activiti</groupId><artifactId>activiti-spring</artifactId><version>${activitti.version}</version>
</dependency>

${spring.vserion}=4.1.5.RELEASE, 此时在dependencies之上,我添加了dependencyManagement,并且将所有冲突的jar包都声明了我想要的版本号,结果如下:

至此,可以告别exclusions了。


http://chatgpt.dhexx.cn/article/mn71Pp3y.shtml

相关文章

dependency-track 初始化源码解析

因项目的关键因素&#xff0c;需查看dependency-check源码流程。个人学习用。自己读代码可以根据web.xml的几个listener来debug。 1、org.dependencytrack.RequirementsVerifier 校验java版本&#xff0c;内存等运行时环境。 2、org.dependencytrack.upgrade.UpgradeInitiali…

Maven中的dependencyManagement 详解

Maven中的dependencyManagement 详解 大家好&#xff0c;我是酷酷的韩金群~ 1.作用: 在Maven中dependencyManagement的作用其实相当于一个对所依赖jar包进行版本管理的管理器。 2.pom.xml文件中&#xff0c;jar的版本判断的两种途径: (1)如果dependencies里的dependency自己…

dependency walker工具简介及使用

dependency walker工具 简介使用 简介 官方概述&#xff1a; Dependency Walker is a free utility that scans any 32-bit or 64-bit Windows module (exe, dll, ocx, sys, etc.) and builds a hierarchical tree diagram of all dependent modules. For each module found, …

pytest.mark.dependency用例依赖

这是一个pytest第三方插件&#xff0c;主要解决用例之间的依赖关系。如果依赖的上下文失败后续的用例会被标识为跳过执行&#xff0c;相当于执行了pytest.mark.skip。 1.安装 安装命令如下&#xff1a; pip install pytest-dependency执行上述命令后&#xff0c;再执行pip i…

dependencyManagement使用简介

dependencyManagement使用简介 Maven中的dependencyManagement元素提供了一种管理依赖版本号的方式。在dependencyManagement元素中声明所依赖的jar包的版本号等信息&#xff0c;那么所有子项目再次引入此依赖jar包时则无需显式的列出版本号。Maven会沿着父子层级向上寻找拥有…

Dependency-check

文章目录 前言工具简介工具原理原理检测过程NVDCVSS 工具安装工具地址环境依赖工具安装Jenkins PluginCommand LineOn *nixOn WindowsOn Mac &#xff08;rec) Maven PluginAnt Task 使用示例命令行方式(Mac)插件方式 报告解读CSV格式报告HTML格式报告 工具对比参考 前言 公司…

maven中dependency的属性(依赖)配置

groupId&#xff0c;artfactId&#xff0c;version&#xff0c;type&#xff0c;classifier&#xff0c;scope&#xff0c;systemPath&#xff0c;exclusions&#xff0c;optional 是 maven的9种依赖属性&#xff0c; 其中groupId&#xff0c;artfactId&#xff0c;version是三…

Maven -- dependency详解

PS&#xff1a;部分来源官网文档&#xff0c;翻译不到位&#xff0c;请移步官网 一 &#xff1a;type&#xff1a;个人理解&#xff1a;依赖<dependency>通过其子标签 定位了某个特定的唯一构件&#xff0c;所以type--依赖类型&#xff0c;更准确的说应该是依赖的构件…

MySQL中“full outer join“的实现

一: 先创建两个表 二: 使用【left join】 union 【right join】 select t1.dim_a, t1.qty qty_a, t2.dim_a dim_b, t2.qty qty_b from ta t1 left join tb t2 on t1.dim_at2.dim_a union select t1.dim_a, t1.qty qty_a, t2.dim_a dim_b, t2.qty qty_b from ta t1 right join…

left join 和 left outer join 的区别

通俗的讲&#xff1a; A left join B 的连接的记录数与A表的记录数同 A right join B 的连接的记录数与B表的记录数同 A left join B 等价B right join A table A: Field_K, Field_A 1 a 3 b 4 c table B: …

SQL中inner join、outer join和cross join的区别

缺省情况下是inner join,开发中使用的left join和right join属于outer join,另外outer join还包括full join.下面我通过图标让大家认识它们的区别。 现有两张表&#xff0c;Table A 是左边的表。Table B 是右边的表。其各有四条记录&#xff0c;其中有两条记录name是相同的&…

SQL Server中CROSS APPLY和OUTER APPLY应用

1.Cross Apply和Outer Apply的理解 新增的APPLY表运算符把右表表达式应用到左表表达式中的每一行。 它不像JOIN那样先计算哪个表表达式都可以&#xff0c;APPLY必选先逻辑地计算左表达式。这种计算输入的逻辑顺序允许把右表达式关联到左表表达式。 APPLY有两种形式&#xff0…

深夜学习:有关Inner、Outer等相关词汇的理解

快速链接: . 👉👉👉 个人博客笔记导读目录(全部) 👈👈👈 付费专栏-付费课程 【购买须知】:【精选】ARMv8/ARMv9架构入门到精通-[目录] 👈👈👈引流关键词: 内存屏障, DSB,DMB,ISB,inner,outer,memory barrier,Non-cacheable,Cacheable, non-shareable,inner…

外连接(OUTER JOIN)

9.3.4 外连接&#xff08;OUTER JOIN&#xff09; 不管是内连接还是带WHERE子句的多表查询&#xff0c;都组合自多个表&#xff0c;并生成结果表。换句话说&#xff0c;如果任何一个源表中的行在另一个源表中没有匹配&#xff0c;DBMS将不把该行放在最后的结果表中。 而外连…

CROSS APPLY和OUTER APPLY的区别

CROSS APPLY和OUTER APPLY的区别 APPLY语法 在SQL中&#xff0c;有这样的一种查询方式&#xff0c;APPLY语法&#xff1a;微软添加了这个新的运算符用于关联一个带有函数的结果集&#xff0c;并把函数应用于表/视图中的每一个限定行中。这个运算符就是APPLY&#xff0c;APPLY的…

图解inner join和outer join的区别

一张图可以完美诠释区别&#xff1a;

lateral view 和 lateral view outer的区别

lateral view 为侧视图&#xff0c;一般用于行转列的处理中 通常会与explode 搭配使用 1、explode 可以拆分map or array 示例 select explode(split("1,2,3",,)) 结果 123 explode 不适用于多个字段 其中一个字段需要炸开的场景&#xff0c;此时需要搭配late…

left join和left outer join 有什么区别?这样解释通俗易懂

作为一名java程序员&#xff0c;求职面试时也会遇到mysql问题&#xff0c;有次我到一家软件面试&#xff0c;就遇到有一道笔试题是考核关于sql 的。 left join和left outer join 有什么区别&#xff1f; 关于left join我平时编写sql表关联时用得比较多&#xff0c;但对于left o…

Oracle 数据库中 FULL OUTER JOIN 的作用 ?

当需要同时显示两个表中所有记录时&#xff0c;FULL OUTER JOIN 就非常有用。 FULL OUTER JOIN 返回左表&#xff08;Table A&#xff09;和右表&#xff08;Table B&#xff09;的所有行&#xff0c;并且如果左表或右表中没有匹配的行&#xff0c;则使用 NULL 值填充缺失的部分…

四种连接类型:inner(内连接),left[outer](左外连接),right[outer](右外连接),full[outer](完全外连接)

在from子句中表示连接操作有四种&#xff1a;inner&#xff08;内连接&#xff09;&#xff0c;left[outer]&#xff08;左外连接&#xff09;&#xff0c;right[outer]&#xff08;右外连接&#xff09;&#xff0c;full[outer]&#xff08;完全外连接&#xff09;。 一、理论…