spring-boot-maven-plugin是Spring Boot项目实现java -jar可执行的核心插件,它在package阶段通过repackage目标将普通jar改造为含依赖(BOOT-INF/lib)、带启动类(Main-Class)和自定义类加载器的fat jar。

Spring Boot Maven 插件(spring-boot-maven-plugin)不是“可选工具”,而是让项目真正能 java -jar 运行的核心构件。它不参与编译或测试,而是在 package 阶段对原始 jar 做关键改造——把普通 jar 变成含依赖、带启动器、有清单的可执行包。
基础用法:三行配置就能跑起来
只要项目继承了 spring-boot-starter-parent(脚手架默认就有),最简配置只需声明插件坐标:
- 不需要写
<version>—— 父 POM 已统一管理版本 - 不需要显式绑定
repackagegoal —— 它默认在package阶段自动触发 - 主类会自动扫描
@SpringBootApplication类,一般无需指定
对应 XML 写法:
<build><plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
常见定制:按需加 configuration
当默认行为不够用时,在 <configuration> 块里调整:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
明确主类:避免多启动类时识别错误,写
<mainClass>com.example.App</mainClass> -
启用分层打包:为 Docker 构建优化,加
<layers><enabled>true</enabled></layers> -
排除无用依赖:比如 Lombok 编译期注解处理器,用
<excludes>移出最终 jar -
重命名输出包:设
<classifier>exec</classifier>后,生成app-1.0.0-exec.jar
构建后验证:两个 jar 的区别要分清
执行 mvn clean package 后,target/ 下会出现:
-
myapp-0.0.1.jar:可执行胖 jar(含 BOOT-INF/、MANIFEST.MF、内嵌 Tomcat) -
myapp-0.0.1.jar.original:原始瘦 jar(仅本项目 class + resources,无依赖)
直接运行前者即可:java -jar target/myapp-0.0.1.jar。若报 “没有主清单属性”,说明插件没生效或没打到正确 jar 上。
开发阶段辅助:用 run 目标快速启停
不用打包也能本地运行,配合 devtools 实现热重载:
- 命令行运行:
mvn spring-boot:run - 支持传参:
mvn spring-boot:run -Dspring-boot.run.jvmArguments="-Xdebug" - 集成测试中可用
start/stop配合maven-failsafe-plugin控制生命周期

















