【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
二、创建父工程
在 IDEA 中新建 Maven 项目,取名
parent-project
。GroupId:
com.example
ArtifactId:
parent-project
Packaging:
pom
(这里必须是pom
,表示这是父工程)
编辑
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-project
→ New
→ Module
,选择 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>
四、运行与验证
进入
parent-project
目录,运行:
mvn clean install
启动
web-api
模块:
cd web-api
mvn spring-boot:run
打开浏览器访问
http://localhost:8080
,验证是否正常启动。
五、总结
通过以上步骤,我们成功搭建了一个 Spring Boot 多模块项目:
父工程统一管理依赖版本,保证一致性;
子模块按功能拆分,职责清晰;
web-api
模块作为入口,组合其他模块的能力;后续可以方便地扩展更多模块,如
order-module
、payment-module
等。
这种结构特别适合 中大型项目,能够有效提升团队协作效率和代码可维护性。