Spring Boot 应用打包后立即退出?正确构建可执行 JAR 是关键
发布时间 - 2026-02-01 00:00:00 点击率:次spring boot 应用通过 java -jar 运行时秒退,但 mvn spring-boot:run 或 vscode 启动正常,通常是因为 ide 插件(如 vscode java project manager)未生成符合 spring boot 规范的可执行 jar —— 缺少嵌入式容器启动逻辑与主类声明,导致 jvm 启动后无长期运行线程而自然终止。
这是 Spring Boot 项目中一个典型但易被忽视的构建问题:可执行 JAR 的生成必须由 spring-boot-maven-plugin 完整参与,而非简单归档 class 文件。
VSCode 的 Java Project Manager(或部分轻量构建功能)往往仅执行 mvn compile 或基础 mvn package,跳过了 spring-boot-maven-plugin 的 repackage 目标。该插件的核心作用是:
- 将依赖 JAR 打包进 BOOT-INF/lib/;
- 将应用类放入 BOOT-INF/classes/;
- 注入 org.springframework.boot.loader.JarLauncher 作为真正的入口类;
- 在 META-INF/MANIFEST.MF 中正确声明 Main-Class: org.springframework.boot.loader.JarLauncher 和 Start-Class: com.jvc.interconnectingflights.app.InterconnectingFlightsApplication。
若缺失上述任一环节(尤其是 Main-Class 指向错误或缺失 Start-Class),JVM 将直接执行 InterconnectingFlightsApplication.main() 并退出——因为 SpringApplication.run(...) 返回后主线程结束,而 Web 容器(Tomcat/Netty)尚未被正确托管为守护进程。
✅ 正确构建方式(终端执行):
# 清理并完整构建含嵌入式容器的可执行 JAR mvn clean package # 验证 MANIFEST.MF 是否合规(应包含两行关键声明) jar -xf target/interconnecting-flights-0.0.1-SNAPSHOT.jar META-INF/MANIFEST.MF grep -E "(Main-Class|Start-Class)" META-INF/MANIFEST.MF
预期输出:
Main-Class: org.springframework.boot.loader.JarLauncher Start-Class: com.jvc.interconnectingflights.app.InterconnectingFlightsApplication
⚠️ 注意事项:
- 不要使用 mvn compile + 手动 jar cvf,这会绕过 Spring Boot 的打包逻辑;
- VSCode 中避免依赖“Build Project”右键菜单(可能调用非 repackage 流程),优先使用集成终端执行 mvn clean package;
- 若使用 CI/CD,确保构建步骤明确调用 mvn clean package -DskipTests(跳过测试可提速,但非必需);
- 检查 pom.xml 中
是否位于 下(你已正确配置,无需修改); - Java 版本需匹配:你使用 JDK 17,确保运行环境 java -version 输出一致,否则可能出现 UnsupportedClassVersionError 导致静默失败(但日志中通常有报错,你的场景更倾向构建问题)。
? 额外验证技巧:
运行 JAR 时添加调试参数,捕获潜在异常:
java -Dlogging.level.org.springframework=DEBUG -jar target/interconnecting-flights-0.0.1-SNAPSHOT.jar
若仍秒退且无明显错误,大概率是 JAR 结构不合法;若出现 ClassNotFoundException 或 NoSuchMethodError,则可能是依赖冲突或版本不兼容(尤其注意 javax.validation:validation-api 与 Spring Boot 3.x 默认的 Jakarta EE 9+ 规范不兼容——建议替换为 jakarta.validation:jakarta.validation-api)。
总结:可执行 JAR ≠ 普通 JA 
# java
# vscode
# app
# tomcat
# ai
# spring
# spring boot
# maven
# jvm
# xml
# class
# 线程
# 主线程
# ide
# 可执行
# 跳过
# 不兼容
# 这是
# 运行环境
# 是因为
# 尤其是
# 报错
# 而非
# 则可
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
html如何与html链接_实现多个HTML页面互相链接【互相】
uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址
Laravel怎么发送邮件_Laravel Mail类SMTP配置教程
IOS倒计时设置UIButton标题title的抖动问题
实例解析Array和String方法
Laravel如何使用Collections进行数据处理?(实用方法示例)
Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】
Laravel如何使用.env文件管理环境变量?(最佳实践)
高端企业智能建站程序:SEO优化与响应式模板定制开发
怎么用AI帮你为初创公司进行市场定位分析?
魔方云NAT建站如何实现端口转发?
在线制作视频网站免费,都有哪些好的动漫网站?
Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权
如何基于云服务器快速搭建个人网站?
如何在阿里云虚拟主机上快速搭建个人网站?
简单实现Android文件上传
Bootstrap CSS布局之列表
Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程
Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复
北京的网站制作公司有哪些,哪个视频网站最好?
PHP 500报错的快速解决方法
Android使用GridView实现日历的简单功能
大型企业网站制作流程,做网站需要注册公司吗?
EditPlus中的正则表达式实战(6)
Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程
如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)
网站建设要注意的标准 促进网站用户好感度!
在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?
Python文件操作最佳实践_稳定性说明【指导】
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
Laravel如何实现本地化和多语言支持?(i18n教程)
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
装修招标网站设计制作流程,装修招标流程?
Python3.6正式版新特性预览
瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口
如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】
,交易猫的商品怎么发布到网站上去?
Laravel如何与Docker(Sail)协同开发?(环境搭建教程)
如何快速搭建个人网站并优化SEO?
高端云建站费用究竟需要多少预算?
如何在IIS中新建站点并配置端口与物理路径?
怎样使用JSON进行数据交换_它有什么限制
Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用
C#如何调用原生C++ COM对象详解
制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?
黑客如何利用漏洞与弱口令入侵网站服务器?
JS去除重复并统计数量的实现方法
如何制作一个表白网站视频,关于勇敢表白的小标题?
如何在阿里云部署织梦网站?
英语简历制作免费网站推荐,如何将简历翻译成英文?

