You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何使用自定义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

火山引擎 最新活动