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

maven pom文件中<dependencyManagement><dependencies><dependency> 三者的区别

这是一个非常核心且重要的 Maven 概念。简单来说,它们的关系和区别如下:

一句话总结:dependencyManagement 是“版本管理器”,dependencies 是“实际使用者”,而 dependency 是最小的“依赖单元”。

下面我们来详细拆解:

1. <dependency> - 最小依赖单元

这是最基础的依赖声明。它代表一个具体的库(如 spring-boot-starter-web),包含 groupId, artifactIdversion 三要素。

  • 作用直接将一个库引入到当前项目的 classpath 中,使其可以在代码中被使用。
  • 位置:位于 <dependencies> 标签内部。
  • 特点:只要声明了,Maven 就会下载它(以及它的依赖)并打包到最终产物中。
<!-- 这就是一个 dependency -->
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.30</version><scope>provided</scope>
</dependency>

2. <dependencies> - 依赖列表

这是一个容器,用来包裹一个或多个 <dependency> 标签。

  • 作用声明当前项目直接需要的所有依赖
  • 位置:直接位于 pom.xml 的根元素 <project> 下。
  • 特点:它是一个“需求清单”,清单里的每个依赖都会被实际引入。
<!-- 这是 dependencies 列表 -->
<dependencies><!-- 列表里包含多个 dependency --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.30</version></dependency>
</dependencies>

3. <dependencyManagement> - 依赖版本管理中心

这是一个特殊的“版本管理”区域。它本身不会引入任何依赖,只负责声明依赖的版本号、scope 等信息。

  • 作用为项目(和其子模块)提供统一的依赖版本管理
  • 位置:位于 pom.xml 的根元素 <project> 下,与 <dependencies> 同级。
  • 特点
    1. 只声明,不引入<dependencyManagement> 里的 <dependency> 不会被自动下载,它只是一个“版本仓库”。
    2. 版本仲裁:当子模块或当前项目在 <dependencies> 中引入一个依赖时,如果没有指定版本,Maven 会自动到 <dependencyManagement> 中查找对应的版本并使用。
    3. 继承性:父项目 dependencyManagement 中声明的版本,会被子项目继承。这是 Spring Boot/Cloud 项目中版本统一的关键。
<!-- 这是 dependencyManagement -->
<dependencyManagement><dependencies><!-- 这里声明的依赖不会被直接引入 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.7.5</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.30</version></dependency></dependencies>
</dependencyManagement>

核心区别对比

特性<dependency><dependencies><dependencyManagement>
角色依赖单元依赖列表/容器版本管理中心
作用将库实际引入项目声明项目的直接依赖统一管理依赖版本
是否引入库 (引入其内部所有依赖) (仅声明版本)
版本号通常需要指定不适用 (它是容器)必须指定 (作为版本源)
典型场景声明单个具体依赖列出项目所有需要的依赖多模块项目统一版本、引入 BOM

实际应用举例 (Spring Boot 项目)

  1. 父 POM (pom.xml):

    <project><dependencyManagement><dependencies><!-- 引入 Spring Boot BOM,它本身就是一个巨大的 dependencyManagement --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.7.5</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>
    </project>
    
  2. 子模块 POM (pom.xml):

    <project><parent><groupId>com.example</groupId><artifactId>my-parent-project</artifactId><version>1.0.0</version></parent><dependencies><!-- 不需要指定 version!版本会从父 POM 的 dependencyManagement 继承 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency></dependencies>
    </project>
    

通过这种方式,整个项目的依赖版本被集中管理,极大地简化了配置并避免了版本冲突。

http://www.dtcms.com/a/406249.html

相关文章:

  • Django数据库连接数超限问题分析与解决方案
  • 软考 UML 用例图 extend扩展关系 include包含关系 泛化继承inherit关系
  • 代码随想录算法训练营第五十一天|99.岛屿数量 深搜 99.岛屿数量 广搜 100.岛屿的最大面积
  • Maven setting文件中<mirrors>(镜像)和 <servers>两个标签的区别
  • 论坛门户网站建设运营费用八度 网站建设
  • iOS 26 设备文件管理实战指南,文件访问、沙盒导出、系统变更与 uni-app 项目适配
  • 【数据结构】List 详解
  • 网站哪个做的好织梦cms手机网站
  • Golang面试-Channel
  • Go channel 的底层实现
  • uniapp USB UVC 摄像头调用的最佳实现 支持Android5到Android16 v2
  • 【uni-app】树形结构数据选择框
  • 视频解析网站甜品蛋糕网站建设策划书
  • PostgreSQL 中序列(Sequence)的详细用法
  • 超低延迟与高并发保障:互联网直播点播平台EasyDSS如何成为企业级现场直播的“技术底座”?
  • 一种个性化认知型人形机器人端到端的架构设计
  • Frp内网穿透v0.64.0
  • 9.25交作业
  • 【原理与应用】3-flink安装与部署
  • 网站经营性备案难不难良品铺子网络营销策划书
  • 永磁同步电机驱动控制系统设计(论文+仿真)
  • Cherry Studio+Ollama+大模型+向量模型,实现RAG私有知识库。智能体实现EXCEL转化为一个报表图表
  • Ansible Playbook 入门指南:从基础到实战
  • 什么是提示词追问?
  • 【MD编辑器Typora】Typora最新 V1.12.1版:轻量级 Markdown 编辑器详细图文下载安装使用指南 【办公学习神器之MD文本编辑器】
  • 内外外贸购物网站建设seo基础优化包括哪些内容
  • 冰雪守护者:输电线路图像识别覆冰监测系统为电网保驾护航
  • MCU的闪存(FLASH)存储器的接口寄存器
  • 软件毕设代做网站阿里云建设网站的流程
  • 第12篇|[特殊字符] Freqtrade 交易所接入全解:API、WebSocket、限频配置详解