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

Maven 依赖管理

Maven 依赖管理


1. 核心概念解析

1.1 dependencyManagement

  • 作用:仅用于统一管理依赖的版本号,不直接引入依赖。
  • 使用场景:多模块项目中,父 POM 统一管理子模块依赖版本,避免冲突和重复配置。
  • 特点
    • 子模块需显式在 <dependencies> 中声明依赖(无需版本号)才能生效。
    • 可覆盖父 POM 的版本(子模块手动指定版本)。

1.2 dependencies

  • 作用直接引入依赖,依赖会自动下载并加入构建路径(如 classpath)。
  • 特点
    • 若未指定版本号,Maven 会尝试解析最新版本(可能导致不一致)。
    • 单模块项目通常直接在此声明依赖。

2. 是否需要同时写在 dependencyManagementdependencies

场景操作方式示例
父 POM 统一管理版本1. 父 POM 在 <dependencyManagement> 声明版本
2. 子模块在 <dependencies> 声明依赖(无需版本号)
<!-- 父 POM -->
<dependencyManagement><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.3.10</version></dependency></dependencies>
</dependencyManagement><!-- 子模块 -->
<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><!-- 无需版本号 --></dependency>
</dependencies>

|
| 直接引入依赖 | 仅在 <dependencies> 声明依赖(需指定版本号) |

<dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version></dependency>
</dependencies>

|
| 覆盖父 POM 版本 | 子模块在 <dependencies> 中显式指定新版本 |

<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.3.20</version> <!-- 覆盖父 POM 版本 --></dependency>
</dependencies>

|


3. 总结对比表

场景是否需要写在 dependencyManagement是否需要写在 dependencies
父 POM 统一管理版本✅ 是(声明版本)子模块 ✅ 是(无需版本号)
直接引入依赖❌ 否✅ 是(需指定版本号)
覆盖父 POM 版本❌ 否✅ 是(需显式指定新版本)

4. 最佳实践

  1. 多模块项目
    • 父 POM 使用 <dependencyManagement> 统一版本。
    • 子模块在 <dependencies> 中声明依赖(无需版本号)。
  2. 单模块项目
    • 直接在 <dependencies> 中声明依赖(需版本号)。
  3. 避免版本冲突
    • 通过 <dependencyManagement> 统一版本,确保依赖一致性。
  4. 灵活覆盖
    • 子模块可通过 <dependencies> 覆盖父 POM 的版本。

5. 示例代码

父 POM(管理版本)

<dependencyManagement><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.3.10</version></dependency></dependencies>
</dependencyManagement>

子模块(引入依赖)

<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><!-- 自动继承父 POM 的版本 --></dependency>
</dependencies>

6. 注意事项

  • 版本优先级:子模块在 <dependencies> 中显式指定的版本会覆盖父 POM 的 <dependencyManagement>
  • 避免冗余:若依赖版本无需统一管理,无需写入 <dependencyManagement>
  • 作用范围<dependencyManagement> 仅管理版本,依赖仍需在 <dependencies> 中声明才能使用。

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

相关文章:

  • 5.组合模式
  • lowbit小解
  • C#操作WPS表格
  • LVS工作模式和算法的总结
  • 【RK3576】【Android14】摄像头MIPI开发调试
  • 基于单片机智能插座设计/智能开关
  • 了解pycharm的基本运用
  • Qt笔记整理(1)
  • 使用PyInstaller打包 Python 工程
  • 【C++基础】内存对齐原则与性能影响:面试高频考点与真题解析
  • CSS篇——第二章 六十五项关键技能(下篇)
  • 统计学习方法的三要素
  • Github Actions Workflows 上传 Dropbox
  • 物联网-规则引擎的定义
  • 解决问题七大步骤
  • python基础复习
  • 【RL第一篇】强化学习入门:核心概念全面详解
  • 永磁同步电机控制算法--弱磁控制(变交轴CCR-VQV)
  • vue2 面试题及详细答案150道(141 - 150)
  • VUE2 学习笔记1
  • ndexedDB 与 LocalStorage:全面对比分析
  • 4 ASPICE的支持过程
  • docker构建springboot镜像
  • 【初识数据结构】CS61B中的基本图算法:DFS, BFS, Dijkstra, A* 算法及其来历用法
  • 字节跳动开源Seed-X 7B多语言翻译模型:28语种全覆盖,性能超越GPT-4、Gemini-2.5与Claude-3.5
  • 【开源项目】GPT学术优化 - GPT Academic
  • 探秘边缘安全架构设计要点解析
  • Linux 自旋锁
  • 四阶电商SEO审计指南:诊断流量漏洞→重建增长引擎(附免费工作簿)
  • 音频3A处理简介之AEC(回音消除)