如何使用自定义parent.pom替代spring-boot-starter-parent?
用自定义parent.pom替代spring-boot-starter-parent的解决方案
嗨,我来帮你搞定这个问题~其实spring-boot-starter-parent核心作用就是提供统一的依赖版本管理和Spring Boot相关插件的默认配置,你想用自己的自定义parent替代它完全可行,根据你的自定义parent是否能继承第三方parent,有两种常见方案:
方案一:自定义parent不继承spring-boot-starter-parent(更灵活)
如果你的自定义parent已经有自己的父pom(比如公司内部的统一基础parent),没办法再继承spring-boot-starter-parent,那可以通过导入Spring Boot的依赖管理BOM来实现版本统一,同时手动配置Spring Boot插件。
自定义parent.pom示例
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <!-- 你的自定义parent坐标 --> <groupId>com.yourcompany</groupId> <artifactId>custom-parent</artifactId> <version>1.0.0</version> <packaging>pom</packaging> <name>Custom Parent POM</name> <!-- 通用配置:自定义属性,也可以覆盖Spring Boot默认版本 --> <properties> <spring-boot.version>3.2.0</spring-boot.version> <your-common-lib.version>2.5.0</your-common-lib.version> <java.version>17</java.version> </properties> <!-- 导入Spring Boot依赖管理BOM,让子项目自动继承版本 --> <dependencyManagement> <dependencies> <!-- Spring Boot核心依赖管理 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring-boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!-- 你的自定义依赖管理 --> <dependency> <groupId>com.yourcompany</groupId> <artifactId>your-common-lib</artifactId> <version>${your-common-lib.version}</version> </dependency> </dependencies> </dependencyManagement> <!-- 配置插件管理,让子项目可以直接使用Spring Boot插件 --> <build> <pluginManagement> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>${spring-boot.version}</version> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </pluginManagement> </build> </project>
子项目pom示例
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <groupId>com.yourcompany</groupId> <artifactId>custom-parent</artifactId> <version>1.0.0</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>your-spring-boot-app</artifactId> <name>Your Spring Boot Application</name> <dependencies> <!-- 直接使用Spring Boot Starter,无需指定版本 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 你的自定义依赖 --> <dependency> <groupId>com.yourcompany</groupId> <artifactId>your-common-lib</artifactId> </dependency> </dependencies> <!-- 引用parent中配置的Spring Boot插件 --> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
方案二:自定义parent继承spring-boot-starter-parent(更简单)
如果你的自定义parent没有其他父pom依赖,那可以让它直接继承spring-boot-starter-parent,然后在上面叠加你的通用配置,这样子项目继承自定义parent后,既能获得Spring Boot的所有特性,又能使用你的统一配置。
自定义parent.pom示例
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <!-- 先继承Spring Boot的parent --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.2.0</version> <relativePath/> <!-- 从Maven仓库拉取,不用本地路径 --> </parent> <!-- 你的自定义parent坐标 --> <groupId>com.yourcompany</groupId> <artifactId>custom-parent</artifactId> <version>1.0.0</version> <packaging>pom</packaging> <name>Custom Parent POM</name> <!-- 通用配置:覆盖Spring Boot默认属性,添加自定义属性 --> <properties> <java.version>17</java.version> <your-common-lib.version>2.5.0</your-common-lib.version> </properties> <!-- 你的自定义依赖管理 --> <dependencyManagement> <dependencies> <dependency> <groupId>com.yourcompany</groupId> <artifactId>your-common-lib</artifactId> <version>${your-common-lib.version}</version> </dependency> </dependencies> </dependencyManagement> <!-- 通用插件配置(可选,如需覆盖Spring Boot默认插件配置) --> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> </plugin> </plugins> </build> </project>
子项目pom示例
和方案一的子项目pom几乎一样,直接继承你的自定义parent即可,无需额外配置Spring Boot的依赖管理或插件。
关键注意点
- 如果你需要覆盖某个Spring Boot依赖的版本,直接在自定义parent的
<properties>里定义对应的版本属性即可(比如spring-cloud.version),或者在<dependencyManagement>中重新声明该依赖的版本,后者优先级更高。 - 确保
spring-boot-dependencies的版本和你实际使用的Spring Boot版本完全一致,避免版本冲突。
内容的提问来源于stack exchange,提问作者fancytown




