如何用 Spring Boot 搭建一个父工程 (Parent Project),并在其中包含多个子模块 (Module),适合企业级项目或者需要分模块管理的场景。


Spring Boot 多模块项目实战:从零搭建父工程与子模块

在日常开发中,我们经常会遇到这样的需求:

  • 系统功能复杂,代码量庞大,需要拆分为多个模块;

  • 不同模块之间既能独立开发,又能在一个父工程下统一管理依赖;

  • 项目结构清晰,方便团队协作和后期维护。

这时,就需要用到 Spring Boot 多模块工程 (Multi-Module Project)

本文将从零开始,带你一步步搭建一个 父工程 + 多个子模块 的 Spring Boot 项目。


一、项目结构设计

我们先设想一个常见的企业级应用:

  • 父工程 (parent-project)

    • common-module:通用工具类、公共依赖封装

    • auth-module:权限认证模块

    • user-module:用户管理模块

    • file-module:文件上传与管理模块

    • gateway-module:网关层

最终结构大概如下:

parent-project
│── pom.xml                # 父工程配置,统一依赖版本
│
├── common-module
│    └── pom.xml
│
├── auth-module
│    └── pom.xml
│
├── user-module
│    └── pom.xml
│
├── file-module
│    └── pom.xml
│
└── gateway-module└── pom.xml

二、创建父工程

  1. 在 IDEA 中新建 Maven 项目,取名 parent-project

    • GroupId: com.example

    • ArtifactId: parent-project

    • Packaging: pom(这里必须是 pom,表示这是父工程)

  2. 编辑 parent-project/pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.18</version><relativePath/></parent><groupId>com.example</groupId><artifactId>springboot-multi-module-parent</artifactId><version>1.0.0</version><packaging>pom</packaging><name>SpringBoot Multi Module Parent</name><description>Spring Boot 多模块项目父工程</description><modules><module>common-module</module><module>auth-module</module><module>user-module</module><module>file-module</module><module>gateway-module</module><module>admin-module</module></modules><properties><java.version>1.8</java.version><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><spring-cloud.version>2021.0.8</spring-cloud.version><jwt.version>0.11.5</jwt.version><swagger.version>3.0.0</swagger.version><mysql.version>8.0.33</mysql.version><druid.version>1.2.18</druid.version><mybatis-plus.version>3.5.3.1</mybatis-plus.version><fastjson.version>2.0.32</fastjson.version><hutool.version>5.8.20</hutool.version></properties><dependencyManagement><dependencies><!-- Spring Cloud --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><!-- 内部模块依赖 --><dependency><groupId>com.example</groupId><artifactId>common-module</artifactId><version>${project.version}</version></dependency><dependency><groupId>com.example</groupId><artifactId>auth-module</artifactId><version>${project.version}</version></dependency><dependency><groupId>com.example</groupId><artifactId>user-module</artifactId><version>${project.version}</version></dependency><dependency><groupId>com.example</groupId><artifactId>file-module</artifactId><version>${project.version}</version></dependency><!-- JWT --><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-api</artifactId><version>${jwt.version}</version></dependency><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-impl</artifactId><version>${jwt.version}</version></dependency><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-jackson</artifactId><version>${jwt.version}</version></dependency><!-- Swagger --><dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>${swagger.version}</version></dependency><!-- MySQL --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><!-- Druid --><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>${druid.version}</version></dependency><!-- MyBatis Plus --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>${mybatis-plus.version}</version></dependency><!-- FastJSON --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>${fastjson.version}</version></dependency><!-- Hutool --><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>${hutool.version}</version></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding></configuration></plugin></plugins></build>
</project>

三、创建子模块

在 IDEA 中,右键 parent-projectNewModule,选择 Maven,然后逐个新建:

  • common-module

  • auth-module

  • user-module

  • file-module

  • gateway-module

注意:这些模块的 pom.xml 中都要 继承父工程

1. common-module(公共模块)

common-module/pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.example</groupId><artifactId>springboot-multi-module-parent</artifactId><version>1.0.0</version></parent><artifactId>common-module</artifactId><name>Common Module</name><description>通用模块,包含工具类、异常处理、统一返回体等</description><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-api</artifactId></dependency><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-impl</artifactId></dependency><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-jackson</artifactId></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency></dependencies>
</project>

2. auth-module(权限认证)

auth-module/pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.example</groupId><artifactId>springboot-multi-module-parent</artifactId><version>1.0.0</version></parent><artifactId>auth-module</artifactId><name>Auth Module</name><description>权限认证模块,基于JWT和Spring Security</description><dependencies><dependency><groupId>com.example</groupId><artifactId>common-module</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>

3. user-module(用户模块)

user-module/pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.example</groupId><artifactId>springboot-multi-module-parent</artifactId><version>1.0.0</version></parent><artifactId>user-module</artifactId><name>User Module</name><description>用户管理模块,支持Session和JWT两种认证方式</description><dependencies><dependency><groupId>com.example</groupId><artifactId>common-module</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>org.springframework.session</groupId><artifactId>spring-session-data-redis</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>

4. file-module(文件上传模块)

file-module/pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.example</groupId><artifactId>springboot-multi-module-parent</artifactId><version>1.0.0</version></parent><artifactId>file-module</artifactId><name>File Module</name><description>文件管理模块,支持文件上传、下载、删除等功能</description><dependencies><dependency><groupId>com.example</groupId><artifactId>common-module</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId></dependency><!-- 图片处理 --><dependency><groupId>net.coobird</groupId><artifactId>thumbnailator</artifactId><version>0.4.19</version></dependency><!-- 文件类型检测 --><dependency><groupId>org.apache.tika</groupId><artifactId>tika-core</artifactId><version>2.8.0</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>

5. gateway-module(网关层)

gateway-module/pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.example</groupId><artifactId>springboot-multi-module-parent</artifactId><version>1.0.0</version></parent><artifactId>gateway-module</artifactId><name>Gateway Module</name><description>网关模块,统一入口,处理跨域、日志、限流等</description><dependencies><!-- Spring Cloud Gateway (基于WebFlux,不能与spring-boot-starter-web一起使用) --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><!-- Redis支持 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis-reactive</artifactId></dependency><!-- macOS DNS解析器 (解决DNS解析警告) --><dependency><groupId>io.netty</groupId><artifactId>netty-resolver-dns-native-macos</artifactId><classifier>osx-x86_64</classifier><scope>runtime</scope></dependency><!-- JWT支持 --><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-api</artifactId></dependency><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-impl</artifactId></dependency><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-jackson</artifactId></dependency><!-- 工具类 --><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId></dependency><!-- 限流 --><dependency><groupId>com.github.vladimir-bukhtoyarov</groupId><artifactId>bucket4j-core</artifactId><version>7.6.0</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>

四、运行与验证

  1. 进入 parent-project 目录,运行:

mvn clean install
  1. 启动 web-api 模块:

cd web-api
mvn spring-boot:run
  1. 打开浏览器访问 http://localhost:8080,验证是否正常启动。


五、总结

通过以上步骤,我们成功搭建了一个 Spring Boot 多模块项目

  • 父工程统一管理依赖版本,保证一致性;

  • 子模块按功能拆分,职责清晰;

  • web-api 模块作为入口,组合其他模块的能力;

  • 后续可以方便地扩展更多模块,如 order-modulepayment-module 等。

这种结构特别适合 中大型项目,能够有效提升团队协作效率和代码可维护性。


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

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

相关文章

企业级AI会议系统技术实现:快鹭如何用AI重构会议全流程

摘要 本文深度解析快鹭AI会议系统的核心技术架构&#xff0c;重点探讨其在语音识别、自然语言处理、数据集成和安全防护等方面的技术实现。通过对比传统会议系统的技术痛点&#xff0c;分析快鹭AI如何通过技术创新实现会议筹备时间减少67%、数据调取速度提升100倍的显著效果。…

【CSS学习笔记3】css特性

1css三大特性 1.1层叠性&#xff1a;就近原则&#xff0c;最新定义的样式 1.2继承性&#xff1a;子标签集成父标签的样式&#xff0c;如文本和字号 行高的继承&#xff1a;不加单位指的是当前文字大小的倍数 body {font: 12px/1.5 Microsoft YaHei;color: #be1313;} div {…

[C语言]常见排序算法①

1.排序的概念及常见的排序算法排序在咱们日常生活中十分的常见&#xff0c;就好比是网上购物的时候通常能够选择按照什么排序&#xff0c;比如价格、评论数量、销量等。那么接下来咱们就来了解一些关于排序的概念。排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xf…

文献阅读笔记:RS电子战测试与测量技术文档

信息来源&#xff1a;罗德与施瓦茨&#xff08;Rohde & Schwarz&#xff09;公司关于电子战&#xff08;Electronic Warfare, EW&#xff09;测试与测量解决方案专业技术文档。 该文档由台湾地区应用工程师Mike Wu撰写&#xff0c;核心围绕电子战基础、雷达系统、实战应用及…

别再纠结 Postman 和 Apifox 了!这款开源神器让 API 测试更简单

别再纠结 Postman 和 Apifox 了&#xff01;这款开源神器让 API 测试更简单&#x1f525; 作为一名开发者&#xff0c;你是否还在为选择 API 测试工具而纠结&#xff1f;Postman 太重、Apifox 要联网、付费功能限制多&#xff1f;今天给大家推荐一款完全免费的开源替代方案 ——…

微调神器LLaMA-Factory官方保姆级教程来了,从环境搭建到模型训练评估全覆盖

1. 项目背景 开源大模型如LLaMA&#xff0c;Qwen&#xff0c;Baichuan等主要都是使用通用数据进行训练而来&#xff0c;其对于不同下游的使用场景和垂直领域的效果有待进一步提升&#xff0c;衍生出了微调训练相关的需求&#xff0c;包含预训练&#xff08;pt&#xff09;&…

创建其他服务器账号

✅ 在 /home74 下创建新用户的完整步骤1. 创建用户并指定 home 目录和 shellsudo useradd -m -d /home74/USERNAME -s /bin/bash USERNAME-m&#xff1a;自动创建目录并复制 /etc/skel 默认配置文件&#xff08;.bashrc 等&#xff09;。-d&#xff1a;指定用户 home 路径&…

【WebGIS】Vue3使用 VueLeaflet + 天地图 搭建地图可视化平台(基础用法)

初始化 创建项目 nodejs 18.0.6npm 9.5.1 引入地图服务 VueLeaflet GitHub - vue-leaflet/vue-leaflet&#xff1a; vue-leaflet 与 vue3 兼容 Vue Leaflet (vue2-leaflet) package.josn安装版本 直接添加四个依赖 {// ..."scripts": {// ...},"depen…

OpenCV 开发 -- 图像阈值处理

文章目录[toc]1 基本概念2 简单阈值处理cv2.threshold3 自适应阈值处理cv2.adaptiveThreshold更多精彩内容&#x1f449;内容导航 &#x1f448;&#x1f449;OpenCV开发 &#x1f448;1 基本概念 图像阈值处理&#xff08;Thresholding&#xff09;是图像处理中的一种基本技术…

单串口服务器-工业级串口联网解决方案

在工业自动化、智能电网、环境监测等领域&#xff0c;传统串口设备&#xff08;如PLC、传感器、仪表等&#xff09;的网络化升级需求日益增长。博为智能单串口服务器凭借高性能硬件架构、多协议支持和工业级可靠性&#xff0c;为RS485设备提供稳定、高效的TCP/IP网络接入能力&a…

第 9 篇:深入浅出学 Java 语言(JDK8 版)—— 吃透泛型机制,筑牢 Java 类型安全防线

简介&#xff1a;聚焦 Java 泛型这一“类型安全保障”核心技术&#xff0c;从泛型解决的核心痛点&#xff08;非泛型代码的运行时类型错误、强制类型转换冗余&#xff09;切入&#xff0c;详解泛型的本质&#xff08;参数化类型&#xff09;、核心用法&#xff08;泛型类/接口/…

MySQL和Redis的数据一致性问题与业界常见解法

一、为什么会出现数据不一致&#xff1f; 根本原因在于&#xff1a;这是一个涉及两个独立存储系统的数据更新操作&#xff0c;它无法被包装成一个原子操作&#xff08;分布式事务&#xff09;。更新数据库和更新缓存是两个独立的步骤&#xff0c;无论在代码中如何排列这两个步骤…

coolshell文章阅读摘抄

coolshell文章阅读摘抄打好基础学好英语限制你的不是其它人&#xff0c;也不是环境&#xff0c;而是自己Java打好基础 程序语言&#xff1a;语言的原理&#xff0c;类库的实现&#xff0c;编程技术&#xff08;并发、异步等&#xff09;&#xff0c;编程范式&#xff0c;设计模…

数据库造神计划第六天---增删改查(CRUD)(2)

&#x1f525;个人主页&#xff1a;寻星探路 &#x1f3ac;作者简介&#xff1a;Java研发方向学习者 &#x1f4d6;个人专栏&#xff1a;《从青铜到王者&#xff0c;就差这讲数据结构&#xff01;&#xff01;&#xff01;》、 《JAVA&#xff08;SE&#xff09;----如此简单&a…

使用Rust实现服务配置/注册中心

Conreg 使用 Rust 实现的配置与注册中心&#xff0c;参考了 Nacos 的设计&#xff0c;简单易用&#xff0c;使用 Raft 保证集群节点数据一致性。 支持的平台&#xff1a; UbuntuCentOS其他常见的 Linux 发行版&#xff08;我们使用 musl 编译&#xff0c;理论上支持所有主流…

三色标记算法

在 JVM 并发垃圾收集&#xff08;GC&#xff09;中&#xff0c;三色标记算法是实现 “GC 线程与用户线程并行执行” 的关键技术&#xff0c;它解决了并发场景下 “如何准确标记存活对象” 的核心问题&#xff0c;是 CMS、G1 等现代收集器的底层基础。一、三色标记的核心&#x…

OpenStack 管理与基础操作学习笔记(一):角色、用户及项目管理实践

OpenStack实验 OpenStack命令 admin-openrc.sh 进入管理员视图查看当前 OpenStack 中的项目列表&#xff0c;验证是否已经登录成功切换用户 修改文件切换用户上传文件切换用户OpenStack 认证管理 实验介绍 通过 OpenStack Dashboard 和 OpenStack CLI 两种方式创建角色、用户、…

直接查找试卷且可以免费下载

有什么网站可以直接查找试卷且可以免费下载&#xff1f; SearXNG开源元搜索引擎 This website shows the SearXNG public instances searx一个可定制的搜索引擎 分享一个基于Blockstack的DApp-searx,一个可定制的搜索引擎。 1- 链接 官网地址&#xff1a;https://searx.worl…

【独立版】智创云享知识付费小程序 v5.0.23+小程序 搭建教程

介绍智创云享知识付费小程序v5.0.23 含PC、小程序、H5 、前端&#xff0c;系统独立版已修复已知bug问题。框架是一款基于ThinkPHP框架开发的虚拟资源知识付费小程序&#xff0c;为广大创业者、自媒体及培训机构提供知识付费、内容付费、资源变现等领域的行业解决方案&#xff1…

布尔运算-区间dp

面试题 08.14. 布尔运算 - 力扣&#xff08;LeetCode&#xff09; Solution 这题的思路比较直接&#xff0c;就是枚举最后一个进行计算的运算符&#xff0c;但是在实现过程中需要注意&#xff0c;定义范式f(l,r)表示l到r范围&#xff0c;l和r必须为数字&#xff0c;l1,r-1为运…