spring-boot-maven-plugin介绍(自定义Starter不要使用此插件)

一、插件介绍

spring-boot-maven-plugin 是一个用于简化 Spring Boot 应用程序构建过程的 Maven 插件。它提供了许多方便的功能来帮助开发者快速构建可执行的 JAR 或 WAR 文件,运行应用程序,以及执行 Spring Boot 特定的任务。

插件在pom中的配置:

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

插件还可以进一步配置,比如在构建过程中排除某些依赖(比如lombok):

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

二、自定义Starter不要使用spring-boot-maven-plugin

1. 场景

在SpringBoot自定义Starter时,spring-boot-maven-plugin 打出来的 jar 包,被目标SpringBoot项目通过 maven 坐标依赖后,目标项目会报错,找不到Starter中的包(import直接报错)。

2. 解决方法

把这个插件删掉,再去打包,maven install 是正常的;目标项目通过 maven 坐标添加依赖后,也能够正常导入(import)和运行。

将这个插件删除后,开发期间的运行调试也是正常的。此时,打出来的jar包,不再是可执行的jar包了,内部结构和SpringBoot的jar包结构是不同的。

3. 原理分析

SpringBoot 自定义Starter,为什么不能用 spring-boot-maven-plugin 打包?

在Spring Boot中创建自定义Starter时,通常不会使用spring-boot-maven-plugin进行打包。这是因为Starter本质上是一个库项目,是一个包含自动配置类和依赖管理的jar包。当你创建一个Starter并希望它能够被其他Spring Boot项目所使用时,你需要确保它只包含自动配置和必要的依赖,而不是一个可执行的Spring Boot应用。

自定义Starter通常不使用 spring-boot-maven-plugin 进行打包,详细原因如下:

  1. 依赖范围:自定义Starter通常只包含配置和代码,而不包含应用的业务逻辑。因此,它们不需要被打包成可执行的JAR文件,而是作为依赖被其他项目引用。

  2. 打包目的spring-boot-maven-plugin 主要用于打包完整的Spring Boot应用程序,包括应用的类和依赖库。而自定义Starter的目的是提供配置和自动配置类,它们应该被打包成普通的JAR文件,而不是包含所有依赖的可执行JAR。

  3. 部署方式:自定义Starter的使用者可能希望保持对依赖库版本的控制,而不是依赖Starter中的版本。因此,它们通常不会被打包成包含所有依赖的单一JAR文件。

总结来说,自定义Starter的目的是提供通用配置和代码,而不是创建一个完整的可执行应用程序。因此,它们通常使用标准的Maven打包插件来打包,而不是使用 spring-boot-maven-plugin

三、JAR包结构对比

1. Maven默认JAR包结构

在这里插入图片描述

2. SpringBoot应用JAR包结构

使用 spring-boot-maven-plugin 打的JAR包,结构如下:

在这里插入图片描述

该JAR包,是可以通过 java -jar 命令直接运行的。

JAR包里面包含了运行需要的依赖的 jar 包。示例如下:

在这里插入图片描述

四、maven-compiler-plugin(插件覆盖)

有一种情况,在父子模块项目中,父项目的POM文件中配置了spring-boot-maven-plugin,导致子模块作为公共模块或者自定义Starter,无法打包。

此时,可以在子模块POM中配置Maven打包插件,来覆盖掉父模块的插件配置。

SpringBoot3.3.3环境下,经过测试,打包正常的插件及版本:

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.13.0</version>
            </plugin>
        </plugins>
    </build>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宋冠巡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值