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

【Java后端】Spring Boot 多模块项目实战:从零搭建父工程与子模块

如何用 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://HBx5zSq1.qgghj.cn
http://KiHnDY5A.qgghj.cn
http://9miPSVoW.qgghj.cn
http://8Qyw25EY.qgghj.cn
http://2iQiWATe.qgghj.cn
http://macSQYgz.qgghj.cn
http://b0qBHy79.qgghj.cn
http://QXgkDjAo.qgghj.cn
http://J0ZAL085.qgghj.cn
http://gcHNg3ka.qgghj.cn
http://BHw2iss7.qgghj.cn
http://PYqq4cE5.qgghj.cn
http://aIYUCHUX.qgghj.cn
http://BItAWvtx.qgghj.cn
http://MlTwQI5o.qgghj.cn
http://2FGpZOux.qgghj.cn
http://YjyG4ZDJ.qgghj.cn
http://7VqEHkiS.qgghj.cn
http://5vnIFcZk.qgghj.cn
http://exjUp00J.qgghj.cn
http://qFXH8cMz.qgghj.cn
http://t2UvD19q.qgghj.cn
http://RpsnOLg6.qgghj.cn
http://prRigMWp.qgghj.cn
http://7TPWPoVM.qgghj.cn
http://dS1LV3ND.qgghj.cn
http://WgcH9ZaS.qgghj.cn
http://DjAARtZ2.qgghj.cn
http://8S2YqHlE.qgghj.cn
http://zbBIE9Qn.qgghj.cn
http://www.dtcms.com/a/383547.html

相关文章:

  • c++命名空间详解
  • 第15课:知识图谱与语义理解
  • HarmonyOS图形处理:Canvas绘制与动画开发实战
  • ffmpeg 有什么用处?
  • 如何重置Gitlab的root用户密码
  • LeetCode算法日记 - Day 41: 数据流的中位数、图像渲染
  • 计算机网络(二)物理层数据链路层
  • 零基础从头教学Linux(Day 33)
  • collections模块
  • 【前端】【高德地图WebJs】【知识体系搭建】图层知识点——>热力图,瓦片图层,自定义图层
  • 关系模型的数据结构
  • Spring Boot 与前端文件上传跨域问题:Multipart、CORS 与网关配置
  • MySQL的事务特性和高可用架构
  • AI重构车载测试:从人工到智能的跨越
  • 前端梳理体系从常问问题去完善-基础篇(html,css,js,ts)
  • 文件查找 find
  • LeetCode 2110.股票平滑下跌阶段的数目
  • 解锁仓储智能调度、运输路径优化、数据实时追踪,全功能降本提效的智慧物流开源了
  • FPGA学习篇——Verilog学习MUX的实现
  • hadoop单机伪分布环境配置
  • Vue3 响应式失效 debug:Proxy 陷阱导致数据更新异常的深度排查
  • el-table的隔行变色不影响row-class-name的背景色
  • 【深度学习新浪潮】游戏中的agents技术研发进展一览
  • Condor 安装
  • 类和对象 (中)
  • [数据结构——lesson10.2堆的应用以及TopK问题]
  • 可可图片编辑 HarmonyOS(6)水印效果
  • 机器学习(四):支持向量机
  • 给定一个有序的正数数组arr和一个正数range,如果可以自由选择arr中的数字,想累加得 到 1~range 范围上所有的数,返回arr最少还缺几个数。
  • 《C++ 容器适配器:stack、queue 与 priority_queue 的设计》