目录

一、打包方式与应用场景

二、父子工程继承关系

1. 父工程配置

2. 子工程配置

三、自定义属性与引用属性

1. 定义属性

2. 在 dependencyManagement 中引用

3. 子工程中引用

四、dependencyManagement 与 dependencies 的区别

五、项目结构示例

六、小结


在实际开发中,尤其是 Spring Boot 多模块项目,我们经常会用到 父工程 + 多个子工程 的结构,以统一管理依赖、版本、打包方式等配置。
本文将带你一步步搞清楚:

  • 多模块项目的打包方式(jar、war、pom)

  • 父子工程的继承关系

  • 自定义属性与引用属性

  • 依赖管理(dependencyManagement vs dependencies)


一、打包方式与应用场景

Maven 项目的 <packaging> 决定了它的打包类型,不同类型适用场景不同:

打包方式说明场景
jar普通 Java 项目打成 jar 包Spring Boot 项目常用(内嵌 Tomcat 运行)
warWeb 应用打成 war 包部署到外部 Tomcat/Jetty 等服务器
pom聚合工程/父工程,不打包代码用于统一管理依赖、插件和版本

提示:多模块项目的父工程一般用 pom 打包。


二、父子工程继承关系

1. 父工程配置

父工程使用 pom 打包方式,并可继承 Spring Boot 官方的 spring-boot-starter-parent 作为基础配置。

父工程 pom.xml 示例:

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.10</version><relativePath/> <!-- 从仓库查找,而不是本地路径 -->
</parent><groupId>com.itheima</groupId>
<artifactId>tlias-parent</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>

2. 子工程配置

子工程需要通过 <parent> 标签指定父工程信息,这样可以继承父工程的依赖和插件配置。

子工程 pom.xml 示例:

<parent><groupId>com.itheima</groupId><artifactId>tlias-parent</artifactId><version>1.0-SNAPSHOT</version><relativePath>../tlias-parent/pom.xml</relativePath>
</parent><groupId>com.itheima</groupId>
<artifactId>tlias-pojo</artifactId>
<version>1.0-SNAPSHOT</version>

注意:

  • 配置了 <parent> 后,groupId 可以省略(会继承父工程的)。

  • relativePath 用于指定父工程 pom 的相对路径(不写会从仓库中找)。


三、自定义属性与引用属性

在父工程中,我们可以用 <properties> 定义版本号等属性,方便全局统一管理。

1. 定义属性

<properties><lombok.version>1.18.30</lombok.version><jjwt.version>0.9.1</jjwt.version>
</properties>

2. 在 dependencyManagement 中引用

<dependencyManagement><dependencies><!-- JWT 令牌 --><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>${jjwt.version}</version></dependency></dependencies>
</dependencyManagement>

3. 子工程中引用

<dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version></dependency>
</dependencies>

优势:

  • 集中管理版本号,方便升级

  • 保证所有模块使用相同版本,避免冲突


四、dependencyManagement 与 dependencies 的区别

作用是否直接引入依赖是否统一管理版本子模块是否需显式声明依赖
dependencies✅ 是❌ 否❌ 不需要
dependencyManagement❌ 否✅ 是✅ 需要显式声明依赖(无需指定版本)

总结:

  • dependencies:直接声明依赖,项目立刻可以用。

  • dependencyManagement:只管理版本,不直接引入,子模块需自己声明依赖。


五、项目结构示例

tlias-parent  (父工程,packaging=pom)
│── tlias-pojo           (实体模块)
│── tlias-utils          (工具模块)
└── tlias-web-management (Web 模块)
  • tlias-parent

    • 继承 spring-boot-starter-parent

    • 定义公共依赖版本(properties)

    • 统一管理依赖版本(dependencyManagement)

  • tlias-pojo / tlias-utils / tlias-web-management

    • 继承父工程

    • 按需添加依赖(无需指定版本)


六、小结

  1. 父工程packaging=pom,继承 spring-boot-starter-parent,集中管理依赖版本。

  2. 子工程:通过 <parent> 继承父工程,减少重复配置。

  3. 属性管理:在父工程 <properties> 定义版本号,全局统一使用。

  4. 依赖管理

    • dependencies:直接引入依赖

    • dependencyManagement:只管理版本,不直接引入

  5. 优势

    • 版本统一,减少冲突

    • 配置集中,维护方便

    • 模块化清晰,便于协作

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/92876.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/92876.shtml
英文地址,请注明出处:http://en.pswp.cn/web/92876.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

把 AI 押进“小黑屋”——基于 LLM 的隐私对话沙盒设计与落地

标签&#xff1a;隐私计算、可信执行环境、LLM、沙盒、内存加密、TEE、SGX、Gramine ---- 1. 背景&#xff1a;甲方爸爸一句话&#xff0c;“数据不能出机房” 我们给某三甲医院做智能问诊助手&#xff0c;模型 70 B、知识库 300 GB。 甲方只给了两条铁律&#xff1a; 1. 患者…

Java 大视界 -- Java 大数据在智能教育学习效果评估指标体系构建与精准评估中的应用(394)

Java 大视界 -- Java 大数据在智能教育学习效果评估指标体系构建与精准评估中的应用&#xff08;394&#xff09;引言&#xff1a;正文&#xff1a;一、传统学习评估的 “数字陷阱”&#xff1a;看不全、说不清、跟不上1.1 评估维度的 “单行道”1.1.1 分数掩盖的 “学习真相”…

Dubbo 3.x源码(33)—Dubbo Consumer接收服务调用响应

基于Dubbo 3.1&#xff0c;详细介绍了Dubbo Consumer接收服务调用响应 此前我们学习了Dubbo Provider处理服务调用请求的流程&#xff0c;现在我们来学习Dubbo Consumer接收服务调用响应流程。 实际上接收请求和接收响应同属于接收消息&#xff0c;它们的流程的很多步骤是一样…

栈和队列:数据结构中的基础与应用​

栈和队列&#xff1a;数据结构中的基础与应用在计算机科学的领域中&#xff0c;数据结构犹如大厦的基石&#xff0c;支撑着各类复杂软件系统的构建。而栈和队列作为两种基础且重要的数据结构&#xff0c;以其独特的特性和广泛的应用&#xff0c;在程序设计的舞台上扮演着不可或…

服务端配置 CORS解决跨域问题的原理

服务端配置 CORS&#xff08;跨域资源共享&#xff09;的原理本质是 浏览器与服务器之间的安全协商机制。其核心在于服务器通过特定的 HTTP 响应头声明允许哪些外部源&#xff08;Origin&#xff09;访问资源&#xff0c;浏览器根据这些响应头决定是否放行跨域请求。以下是详细…

Unity笔记(五)知识补充——场景切换、退出游戏、鼠标隐藏锁定、随机数、委托

写在前面&#xff1a;写本系列(自用)的目的是回顾已经学过的知识、记录新学习的知识或是记录心得理解&#xff0c;方便自己以后快速复习&#xff0c;减少遗忘。主要是C#代码部分。十七、场景切换和退出游戏1、场景切换场景切换使用方法&#xff1a; SceneManager.LoadScene()&a…

用 Spring 思维快速上手 DDD——以 Kratos 为例的分层解读

用 Spring 思维理解 DDD —— 以 Kratos 为参照 ​ 在此前的学习工作中&#xff0c;使用的开发框架一直都是 SpringBoot&#xff0c;对 MVC 架构几乎是肌肉记忆&#xff1a;Controller 接请求&#xff0c;Service 写业务逻辑&#xff0c;Mapper 操作数据库&#xff0c;这套套路…

docspace|Linux|使用docker完全离线化部署onlyoffice之docspace文档协作系统(全网首发)

一、 前言 书接上回&#xff0c;Linux|实用工具|onlyoffice workspace使用docker快速部署&#xff08;离线和定制化部署&#xff09;-CSDN博客&#xff0c;如果是小公司或者比如某个项目组内部使用&#xff0c;那么&#xff0c;使用docspace这个文档协同系统是非常合适的&…

【教程】如何高效提取胡萝卜块根形态和颜色特征?

胡萝卜是全球不可或缺的健康食材和重要的经济作物&#xff0c; 从田间到餐桌&#xff0c;从鲜食到深加工&#xff0c;胡萝卜在现代人的饮食和健康中扮演着极其重要的角色&#xff0c;通过量化块根形态和色泽均匀性&#xff0c;可实现对高产优质胡萝卜品种的快速筛选。工具/材料…

Python初学者笔记第二十四期 -- (面向对象编程)

第33节课 面向对象编程 1. 面向对象编程基础 1.1 什么是面向对象编程面向过程&#xff1a;执行者 耗时 费力 结果也不一定完美 面向对象&#xff1a;指挥者 省时 省力 结果比较完美面向对象编程(Object-Oriented Programming, OOP)是一种编程范式&#xff0c;它使用"对象&…

Go 语言 里 `var`、`make`、`new`、`:=` 的区别

把 Go 语言 里 var、make、new、: 的区别彻底梳理一下。1️⃣ var 作用&#xff1a;声明变量&#xff08;可以带初始值&#xff0c;也可以不带&#xff09;。语法&#xff1a; var a int // 声明整型变量&#xff0c;默认值为 0 var b string // 默认值 ""…

计算机网络---IP(互联网协议)

一、IP协议概述 互联网协议&#xff08;Internet Protocol&#xff0c;IP&#xff09;是TCP/IP协议族的核心成员&#xff0c;位于OSI模型的网络层&#xff08;第三层&#xff09;&#xff0c;负责将数据包从源主机传输到目标主机。它是一种无连接、不可靠的协议&#xff0c;提供…

DataFun联合开源AllData社区和开源Gravitino社区将在8月9日相聚数据治理峰会论坛

&#x1f525;&#x1f525; AllData大数据产品是可定义数据中台&#xff0c;以数据平台为底座&#xff0c;以数据中台为桥梁&#xff0c;以机器学习平台为中层框架&#xff0c;以大模型应用为上游产品&#xff0c;提供全链路数字化解决方案。 ✨杭州奥零数据科技官网&#xff…

【工具】通用文档转换器 推荐 Markdown 转为 Word 或者 Pdf格式 可以批量或者通过代码调用

【工具】通用文档转换器 推荐 可以批量或者通过代码调用 通用文档转换器 https://github.com/jgm/pandoc/ Pandoc - index 下载地址 https://github.com/jgm/pandoc/releases 使用方法: 比如 Markdown 转为 Word 或者 Pdf格式 pandoc -s MANUAL.txt -o example29.docx …

【UEFI系列】Super IO

文章目录一、什么是Super IO二、Super IO的作用常见厂商三、逻辑设备控制如何访问SIO逻辑设备的配置寄存器具体配置数值四、硬件监控&#xff08;hardware monitor&#xff09;一、什么是Super IO Super Input/Output超级输入输出控制器。 通过LPC&#xff08;low pin count&a…

飞算 JavaAI 2.0.0 测评:自然语言编程如何颠覆传统开发?

一、前言 在AI技术高速发展的今天&#xff0c;编程方式正在经历一场革命。传统的“手写代码”模式逐渐被AI辅助开发取代&#xff0c;而飞算JavaAI 2.0.0的推出&#xff0c;更是让自然语言编程成为现实。 作为一名长期使用Java开发的程序员&#xff0c;我决定深度体验飞算Java…

Dubbo + zk 微服务

一、安装zk注册中心 win版本&#xff1a;windows环境下安装zookeeper教程详解&#xff08;单机版&#xff09;-CSDN博客 linux版本&#xff1a; 二、服务提供方搭建 引入dubbo和zk依赖 提供接口 使用注解方式实现接口级注册到zk&#xff0c;而springcloud是将服务注册到注册…

聆思duomotai_ap sdk适配dooiRobot

一、说明 1、duomotai_ap介绍 duomotai_ap是一个针对多模态开发板&#xff08;如 CSK6-MIX 开发板&#xff09;的大模型 AI 开发套件 SDK&#xff0c;主要用于开发语音、视觉等多模态 AI 应用。 2、dooiRobot介绍 基于Doly 机器人的经典外观设计&#xff0c;采用聆思CSK6011A…

Photoshop软件打开WebP文件格的操作教程

Photoshop软件打开WebP文件格的操作教程&#xff0c;好吧&#xff0c;这是英文原版&#xff1a; Photoshop 23.2 原生支持 WebP 格式&#xff0c;无需插件即可打开、编辑和保存 WebP 文件。用户可通过“文件 > 另存为副本”选择 WebP 格式&#xff0c;调整无损/有损压缩及质…

【数据结构】——顺序表链表(超详细解析!!!)

目录一. 前言二. 顺序表1. 顺序表的特点2. 代码实现三. 链表1. 单向链表代码实现2.双向链表代码实现四. 顺序表与链表的区别总结一. 前言 顺序表和链表是最基础的两种线性表实现方式。它们各有特点&#xff0c;适用于不同的应用场景。本文将详细介绍这两种数据结构的实现原理、…