spring boot打包可执行jar的核心是spring-boot-maven-plugin插件,它将项目代码、所有依赖、内嵌容器(如tomcat)及配置打包为含boot-inf/classes/、boot-inf/lib/和jarlauncher的自包含fat jar,通过java -jar直接运行。

Spring Boot 打包可执行 Jar 文件,核心是用 spring-boot-maven-plugin 插件把项目代码、所有依赖、内嵌容器(如 Tomcat)和配置一起打包成一个“自包含”的 Fat Jar。它不是普通 Jar,而是能直接通过 java -jar 启动的独立程序。
确保 pom.xml 中正确配置插件
这是最关键的一步。必须在 <build><plugins></plugins></build> 中声明 spring-boot-maven-plugin,否则 mvn package 生成的只是普通 Jar,无法直接运行:
- Spring Boot 2.x / 3.x 均默认启用该插件,但显式配置更稳妥
- 无需手动指定
<mainclass></mainclass>,插件会自动探测含public static void main的启动类 - 插件默认执行
repackage目标,重写原始 jar 为可执行结构
执行标准 Maven 打包命令
在项目根目录下运行:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
mvn clean package—— 最常用,生成带版本号的 jar,如target/myapp-0.0.1-SNAPSHOT.jar - 若需跳过测试:
mvn clean package -DskipTests - 生成的 jar 默认放在
target/目录,不是classes/或out/
验证 Jar 是否真正可执行
别只看文件大小或后缀。打开 jar 检查内部结构是否符合 Spring Boot 规范:
- 解压 jar,应看到
BOOT-INF/classes/(你的代码和application.yml等)、BOOT-INF/lib/(所有依赖 jar) -
META-INF/MANIFEST.MF中必须有Start-Class(你的主类)和Launcher-Class: org.springframework.boot.loader.JarLauncher - 运行
java -jar myapp.jar,控制台输出含Starting MyApplication using Java...即成功
常见误区与避坑点
很多“打不起来”问题其实出在细节上:
- 误用
maven-jar-plugin替代spring-boot-maven-plugin,会导致无BOOT-INF目录 - IDEA 里右键 → “Build” 或 “Build Artifacts” 生成的是传统 jar,不是 Spring Boot 可执行 jar
- 多模块项目中,插件必须配置在最终要打包的模块(含
@SpringBootApplication的模块) - 若使用了
spring-boot-thin-launcher或自定义PropertiesLauncher,需额外配置,不属于默认流程










