Dependencies与DependencyManagement的区别
现在Maven项目管理,在开发中时比较常用的,在一些项目汇总遇到依赖冲突的问题之后,还是没有能有一个很好的解决办法,这次就来看看在使用Maven管理依赖的过程中dependencies与dependencyManagement的区别。
DepencyManagement应用场景
当我们的项目模块很多的时候,使用Maven管理项目是非常方便的,它可以我们管理、构建、文档、报告、依赖、SCMS、发布、分发等等一系列的东西。可以方便编译代码、进行依赖管理、管理二进制库等等操作。
由于在项目中使用的模块较多,所以又可以抽象一层,抽出一个itoo-base-parent来管理子项目的公共依赖。为了项目能够正确地运行,必须让所有子项目使用依赖项的统一版本,必须确保应用的各个项目的依赖项和版本一致,才能保证测试和发布是相同的结果。
在项目的顶层的POM文件中,会看到一个dependencyManagement元素。通过它来管理jar的版本,让子项目中引用一个依赖而不用显示的列出版本号。Maven会沿着父层次向上走,直到找到拥有dependencyManagement元素的项目,然后她就会使用在这个dependencyManagement元素中指定的版本号。
<dependencyManagement> <dependencies> <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>${javaee-api.version}</version> </dependency> </dependencies>
</dependencyManagement>
父子继承
<!--继承父类--> <parent> <artifactId>itoo-base-parent</artifactId> <groupId>com.tgb</groupId> <version>0.0.1-SNAPSHOT</version> <relativePath>../itoo-base-parent/pom.xml</relativePath> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>itoo-base</artifactId> <packaging>ejb</packaging> <!--依赖关系--> <dependencies> <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> </dependency> <dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>org.eclipse.persistence.jpa</artifactId> <scope>provided</scope> </dependency> </dependencies>
这样做的好处是:统一管理项目的版本号,确保应用的各个项目的依赖和版本一致,才能保证测试和发布是相同的成果。所以,在顶层pom中定义共同的依赖关系。同时可以避免在每个使用的子项目中都声明一个版本号,这样想升级或者想切换到另一个版本的时候只需要在父类容器中进行更新,而不需要任何一个子项目的修改;如果某个子项目需要另一个版本号的时候,只需要在dependencies中声明对应的版本号就可以了,子类就会使用子类声明的版本号,而不继承父类版本号。
Dependencies
dependencyManagement,所有生命在dependencies里的依赖都会自动引入,并默认被所有的子项目继承。
区别
dependencies 就是在子项目中不引入该依赖项,那么子项目中仍然会从父项目中继承该项目,这个继承属于是全部继承。
dependencyManagement 里只声明依赖,并不现实引入,因此子项目需要显示声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来;只有在子项目中写入了该依赖项,并且没有指定具体的版本,才会从父项目再继承该依赖项,并且version和scope都是从父POM文件中进行读取。另外如果子项目中指定了版本号,那么会使用子项目中指定的版本号。
Maven 约定优于配置
Maven提出这样的约束主要是为项目提供合理的默认行为,不需要一些不必要的配置,提供了默认的目录
- src 源代码和测试代码的根目录
- main应用代码的目录
- java 源代码的目录
- resource 项目资源文件
- test 测试代码源目录
- target 编译后的各种文件、jar文件等的路径。
对于Maven的约定优于配置的理解,一方面对小型项目基本满足不需要自己配置东西,使用Maven已经配置好的东西,快速开发。另一方面,对于不满足的项目还需要一些自定义的内容,体现了灵活性。配置大量减少,随着项目的越复杂这种优势越明显。
总结区别
dependencies中jar直接加入到项目中,管理的是依赖关系(如果有父级pom,子级pom,则子级pom中只能被动接受父级的版本);
dependencyManagement 主要管理版本,对于子类继承同一个父类是很有用的,集中管理依赖版本不添加依赖关系,对于其中定义的版本,子pom中不一定继承父级pom中的所有版本。
相关文章:

Dependencies与DependencyManagement的区别
现在Maven项目管理,在开发中时比较常用的,在一些项目汇总遇到依赖冲突的问题之后,还是没有能有一个很好的解决办法,这次就来看看在使用Maven管理依赖的过程中dependencies与dependencyManagement的区别。 DepencyManagement应用场…...
git svn 日记
1. git log -p -1 --name-only 该命令用于查看最新的一次提交记录的详细信息,包括文件更改情况。 git log:显示 Git 仓库的提交历史。-p:显示每次提交的差异 (diff),也就是文件内容的修改部分。-1:表示只显示最近的一…...

FSMC
RAM ROM RAM和ROM相比,两者的最大区别是RAM在断电以后保存在上面的数据会自动消失,而ROM不会自动消失,可以长时间断电保存。 并且RAM的速度要远远高于ROM的速度。 SRAM SRAM 的存储单元以锁存器来存储数据,种电路结构不需要定时…...

NAT技术+代理服务器+内网穿透
NAT技术 IPv4协议中,会存在IP地址数量不充足的问题,所以不同的子网中会存在相同IP地址的主机。那么就可以理解为私有网络的IP地址并不是唯一对应的,而公网中的IP地址都是唯一的,所以NAT(Network Address Translation&…...
【ABAP】ole2 excel多sheet导入导出
原理就不分享了 原来是用了动态表格,但是要导出不方便,所以就写死了,excel多sheet导入的类放在另一篇文章里 REPORT zcdemo17. INCLUDE ole2incl.DATA: excel TYPE ole2_object,workbooks TYPE ole2_object,workbook TYPE ole2_object…...
图像配准-小结
图像配准:找到一对图像间的几何变换关系,并且将待配准图像根据几何变换关系对齐到参考图像上,从而为图像融合、变化检测/监测提供基础。图像匹配,在某些语境中可能与上面的图像配准指的是一个东西,而在某些语境中可能指…...

【2025】基于Python的空气质量综合分析系统的设计与实现(源码+文档+调试+答疑)
博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…...

计算机基础知识-2
x86架构的寄存器 AT&T汇编和Intel汇编的区别 每取出完一条指令,PC会自动+"1",指向下一条要被执行的指令。这里的1是指下一条指令,但是指令本身可能占用多个字节,所以地址可能不是以1叠加 当前执行的是10…...
Ubuntu2204配置连续失败后账户锁定
配置启用pam_faillock sudo nano /etc/pam.d/common-auth在最上面添加以下内容 auth required pam_faillock.so preauth silent audit auth sufficient pam_unix.so nullok try_first_pass auth [defaultdie] pam_faillock.so authfail auditsudo nano /etc/pam.d/…...

windows下安装elasticSearch和kibana
下载es 下载地址官网 下载后是个压缩包(elasticsearch-8.15.0-windows-x86_64),解压即可 启动 配置 改一下 /conf/jvm.options文件,最后加一行编码配置,这个是为了启动后防止控制台乱码 -Dfile.encodingGBK启动es 依赖jdk8环境…...

Java-IDEA模拟一个Redis服务器,与Redis客户端进行一次简单的交互。默认端口号:6379
首先要了解Redis的交互协议。 摘抄: 简单字符串(Simple Strings): 以 “” 开头,例如 “OK\r\n” 表示一个成功的响应。错误(Errors): 以 “-” 开头,例如 “-ERR unknown command\r\n” 表示一…...

WEB服务与虚拟主机/IIS中间件部署
WWW(庞大的信息系统)是基于客户机/服务器⽅式的信息发现技术和超⽂本技术的综合。网页浏览器//网页服务器 WWW的构建基于三项核⼼技术: HTTP:超文本传输协议,⽤于在Web服务器和客户端之间传输数据。HTML:⽤…...

JAVA开源项目 图书个性化推荐系统 计算机毕业设计
本文项目编号 T 015 ,文末自助获取源码 \color{red}{T015,文末自助获取源码} T015,文末自助获取源码 目录 一、系统介绍1.1 业务分析1.2 用例设计1.3 时序设计 二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究…...
Spring Boot 注解探秘:HTTP 请求的魅力之旅
在SpringBoot应用开发中,处理Http请求是一项基础且重要的任务。Spring Boot通过提供一系列丰富的注解极大地简化了这一过程,使得定义请求处理器和路由变得更加直观与便捷。这些注解不仅帮助开发者清晰地定义不同类型的HTTP请求如何被处理,同时…...

TYPE-C USB设计
目录 摘要 TYPE-C电路 握手过程 USB电路 摘要 TYPE-C,是USB的一种接口,USB的第一种接口为常见的USB接口,U盘即为这种接口;第二种接口的形状类似一个凸字,常应用在打印机中,第三种接口即为TYPE-C,支持正…...
Python炒股自动化,怎样理解股票交易性质
炒股自动化:申请官方API接口,散户也可以 python炒股自动化(0),申请券商API接口 python炒股自动化(1),量化交易接口区别 Python炒股自动化(2):获取…...

Vue2 day-02
目录 一. Vue脚手架(Vue CLI) 1.1 安装新版本的Vue脚手架vue/cli 1.2 用命令创建Vue项目 1.2.1 命令创建vue项目 1.2.2 默认创建 1.2.3 自定义创建 1.2.4 基于ui界面创建Vue项目 1.3 分析Vue脚手架生成的项目结构及代码执行 1.3.1 默认创建文件结构 1.3.2 分开放置文…...

什么?!新版 Node.js V22.5 自带 SQLite 模块啦
前言 2024年7月,Node.js V22.5.0 版本发布,自带了 SQLite 模块,意味着开发者可以直接在程序中使用 SQLite 数据库,而无需引入第三方库👍。 话不多说,感觉来体验一波✈。 安装/升级 我现在用的是21.4.0版…...
Maven持续集成(Continuous integration,简称CI)版本友好管理
从Maven 3.5.0-beta-1 版本开始可以在pom文件中使用 r e v i s i o n 、 {revision}、 revision、{sha1}、${changelist}做为版本的占位符。 一、单module简单使用${revision}的场景 <project><modelVersion>4.0.0</modelVersion><parent><groupId…...

EvoSuite使用总结
1.安装EvoSuite插件 以IDEA为例,在Plugins栏搜索EvoSuite后点击install,安装完成后重启IDEA 2.使用EvoSuite 选中文件右键选择Run EvoSuite 生成成功可以看到如下提示: 注意事项: 生成路径:src/test/java 使用juni…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...

【Linux系统】Linux环境变量:系统配置的隐形指挥官
。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量:setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...

论文阅读:LLM4Drive: A Survey of Large Language Models for Autonomous Driving
地址:LLM4Drive: A Survey of Large Language Models for Autonomous Driving 摘要翻译 自动驾驶技术作为推动交通和城市出行变革的催化剂,正从基于规则的系统向数据驱动策略转变。传统的模块化系统受限于级联模块间的累积误差和缺乏灵活性的预设规则。…...
uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)
UniApp 集成腾讯云 IM 富媒体消息全攻略(地理位置/文件) 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型,核心实现方式: 标准消息类型:直接使用 SDK 内置类型(文件、图片等)自…...

Spring AOP代理对象生成原理
代理对象生成的关键类是【AnnotationAwareAspectJAutoProxyCreator】,这个类继承了【BeanPostProcessor】是一个后置处理器 在bean对象生命周期中初始化时执行【org.springframework.beans.factory.config.BeanPostProcessor#postProcessAfterInitialization】方法时…...
机器学习的数学基础:线性模型
线性模型 线性模型的基本形式为: f ( x ) ω T x b f\left(\boldsymbol{x}\right)\boldsymbol{\omega}^\text{T}\boldsymbol{x}b f(x)ωTxb 回归问题 利用最小二乘法,得到 ω \boldsymbol{\omega} ω和 b b b的参数估计$ \boldsymbol{\hat{\omega}}…...