Spring Boot 父子工程是一种多模块项目结构,通过 Maven 的继承机制来管理依赖关系。这种结构具有以下优势:
spring-boot-parent/
├── parent-pom.xml # 父工程POM
├── common/ # 公共工具模块
│ └── pom.xml
├── api/ # API接口模块
│ └── pom.xml
├── service/ # 业务服务模块
│ └── pom.xml
└── web/ # Web应用启动模块
└── pom.xml
<groupId>com.examplegroupId>
<artifactId>spring-boot-parentartifactId>
<version>1.0.0version>
<packaging>pompackaging>
<modules>
<module>commonmodule>
<module>apimodule>
<module>servicemodule>
<module>webmodule>
modules>
<properties>
<spring-boot.version>3.2.0spring-boot.version>
<spring-cloud.version>2023.0.0spring-cloud.version>
<mysql.version>8.0.33mysql.version>
properties>
重要概念:dependencyManagement
不会直接引入依赖,只是管理版本号。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-dependenciesartifactId>
<version>${spring-boot.version}version>
<type>pomtype>
<scope>importscope>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>${mysql.version}version>
dependency>
<dependency>
<groupId>com.examplegroupId>
<artifactId>commonartifactId>
<version>${project.version}version>
dependency>
dependencies>
dependencyManagement>
所有子模块都会继承这些依赖:
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starterartifactId>
dependency>
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
<optional>trueoptional>
dependency>
dependencies>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
<version>${spring-boot.version}version>
plugin>
plugins>
pluginManagement>
build>
<parent>
<groupId>com.examplegroupId>
<artifactId>spring-boot-parentartifactId>
<version>1.0.0version>
<relativePath>../parent-pom.xmlrelativePath>
parent>
<dependencies>
<dependency>
<groupId>com.examplegroupId>
<artifactId>commonartifactId>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
dependency>
dependencies>
web (启动模块)
├── service (业务服务)
│ ├── api (API接口)
│ │ └── common (公共工具)
│ └── common (公共工具)
└── common (公共工具)
模块 | 职责 | 主要依赖 |
---|---|---|
common | 公共工具类、常量、异常 | hutool、fastjson、validation |
api | API接口定义、DTO | common、swagger |
service | 业务逻辑、数据访问 | api、common、mybatis、redis |
web | 应用启动、控制器 | service、actuator、devtools |
<dependencyManagement>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>8.0.33version>
dependency>
dependencyManagement>
<dependencies>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
dependency>
dependencies>
子模块自动继承父工程的:
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
dependency>
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
<optional>trueoptional>
dependency>
properties
中定义${property.name}
引用版本号spring-boot-maven-plugin
mvn dependency:tree
查看依赖树exclusions
标签排除传递依赖relativePath
配置是否正确Spring Boot 父子工程通过 Maven 的继承机制实现了:
这种结构特别适合中大型项目的开发和维护,能够有效提高开发效率和代码质量。