当前位置: 首页 > 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.xdnf.cn/news/1150399.html

相关文章:

  • Java从入门到精通:全面学习路线指南
  • uniapp props、$ref、$emit、$parent、$child、$on
  • MySQL练习3
  • 【橘子分布式】gRPC(编程篇-中)
  • 《Origin画百图》之多分类矩阵散点图
  • 从零开始学Tailwind CSS : 颜色配置原理与实践
  • (后者可以节约内存/GPU显存)Pytorch中求逆torch.inverse和解线性方程组torch.linalg.solve有什么关系
  • 93.数字信号处理相关的一些问题
  • 发明专利怎么写,与学术文章异同点与注意事项
  • 月舟科技近调记录
  • Python+ArcGIS+AI蒸散发与GPP估算|Penman-Monteith模型|FLUXNET数据处理|多源产品融合|专业科研绘图与可视化等
  • 实验-华为综合
  • Visual Studio Code(VSCode)中设置中文界面
  • 【Python库包】Gurobi-Optimize (求解 MIP) 安装
  • GATE:基于移动嵌入式设备的实时边缘构建图注意力神经网络用于鲁棒室内定位
  • ElasticSearch:商品SKU+SPU实现join查询,设计及优化
  • 【数据结构】二叉树初阶详解(一):树与二叉树基础 + 堆结构全解析
  • 计算机网络:(十)虚拟专用网 VPN 和网络地址转换 NAT
  • 智能体之变:深度解析OpenAI ChatGPT Agent如何重塑人机协作的未来
  • 【Linux】基本指令
  • c++——友元函数
  • Java大视界:Java大数据在智能医疗电子健康档案数据挖掘与健康服务创新>
  • Android无需授权直接访问Android/data目录漏洞
  • K8s与Helm实战:从入门到精通
  • MySQL数据丢失救援办法
  • 物联网iot、mqtt协议与华为云平台的综合实践(万字0基础保姆级教程)
  • 抖音回应:没有自建外卖,就是在团购的基础上增加的配送功能
  • 游戏开发日志
  • Android回调机制入门
  • Ambiguity-Resolved Waveform Design for Cell-free OFDM-Based ISAC Systems