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

Maven项目父模块POM中不应包含实际依赖(dependency)

父模块POM中不应包含实际依赖

一、场景

一个基于SpringBoot的Maven父子模块的项目(一个父项目中包含多个子项目),父模块 POM文件中 <packaging>pom</packaging>。父模块的POM中应该包含实际入依赖(dependency)吗?

二、结论

父模块不应该在<dependencies>部分添加实际运行时的依赖,仅应通过<dependencyManagement>来管理依赖版本。

三、原因分析

在一个基于Spring Boot的Maven项目中,如果你有一个父模块(通常用于共享配置,如依赖管理版本等),那么这个父模块的pom.xml文件中的<packaging>元素确实应当设置为pom。这意味着该模块本身不会被打包成JAR或WAR文件,而是作为一个项目的描述符来管理子模块的依赖和其他配置。

对于父模块是否应该引入依赖,答案取决于你的具体需求:

  1. 依赖管理:父模块的主要作用之一就是管理所有子模块共有的依赖项的版本号。这样可以保证所有子模块使用的依赖版本是一致的,减少版本冲突的风险。因此,在父模块中声明依赖项(通常是在<dependencyManagement>标签内)是很有意义的。

    <dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>${spring-boot.version}</version></dependency><!-- 更多依赖... --></dependencies>
    </dependencyManagement>
    
  2. 实际依赖:然而,父模块不应该包含任何实际的<dependencies>,除非这些依赖是为了构建过程服务的(例如,用于编译或测试的插件依赖)。实际运行时的依赖应该放在子模块中,而父模块只是用来管理这些依赖的版本。

    如果你在父模块的根<dependencies>部分添加了依赖,那么这些依赖将会被所有继承该父POM的子模块继承。这可能会导致不必要的依赖被包含进来,或者某些子模块不需要的依赖也被强制包含。

总结来说,父模块应该包含<dependencyManagement>来管理依赖版本,而不应该在<dependencies>部分添加实际运行时的依赖。子模块需要显式地声明它们的实际依赖,但不需要指定版本号,因为这些版本号已经在父模块中定义好了。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【Clickhouse】Clickhouse数据库简介
  • 如何选择web服务
  • Spring Boot Admin集成与自定义监控告警
  • HOT100(九)多维动态规划
  • EmguCV学习笔记 VB.Net 11.3 DNN其它
  • Ubuntu上安装libdc1394-22-dev出现无法定位安装包的解决办法
  • ④JdbcTemplate与声明式事务
  • UE5学习笔记21-武器的射击功能
  • 【小沐学OpenGL】Ubuntu环境下glew的安装和使用
  • 2.10鼠标事件
  • malloc中的mmap是如何分配内存的
  • Leetcode第414周赛第二题:3281. 范围内整数的最大得分
  • 两种常用损失函数:nn.CrossEntropyLoss 与 nn.TripletMarginLoss
  • ​Benvista PhotoZoom Pro 9.0.4新功能介绍
  • 解决 Python IDLE 横向显示文字的方法
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • Android组件 - 收藏集 - 掘金
  • django开发-定时任务的使用
  • gitlab-ci配置详解(一)
  • Idea+maven+scala构建包并在spark on yarn 运行
  • Linux快速复制或删除大量小文件
  • php中curl和soap方式请求服务超时问题
  • sessionStorage和localStorage
  • Spark学习笔记之相关记录
  • springMvc学习笔记(2)
  • WePY 在小程序性能调优上做出的探究
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 数据可视化之 Sankey 桑基图的实现
  • 一个完整Java Web项目背后的密码
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • HanLP分词命名实体提取详解
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • # linux 中使用 visudo 命令,怎么保存退出?
  • #Linux(make工具和makefile文件以及makefile语法)
  • #单片机(TB6600驱动42步进电机)
  • #如何使用 Qt 5.6 在 Android 上启用 NFC
  • (js)循环条件满足时终止循环
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (WSI分类)WSI分类文献小综述 2024
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (第三期)书生大模型实战营——InternVL(冷笑话大师)部署微调实践
  • (二)十分简易快速 自己训练样本 opencv级联lbp分类器 车牌识别
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (译) 函数式 JS #1:简介
  • (转)树状数组
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • (状压dp)uva 10817 Headmaster's Headache
  • .NET Core跨平台微服务学习资源
  • .Net MVC4 上传大文件,并保存表单
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .NET精简框架的“无法找到资源程序集”异常释疑
  • .net开发引用程序集提示没有强名称的解决办法
  • .net连接oracle数据库