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

R。Spring Boot 的“开箱即用”依赖于 spring-boot-maven-plugin 的深度定制。坚持使用 mvn clean package 构建,并通过 MANIFEST.MF 验证,即可彻底解决“JAR 启动即退出”问题。


# 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去除重复并统计数量的实现方法  如何制作一个表白网站视频,关于勇敢表白的小标题?  如何在阿里云部署织梦网站?  英语简历制作免费网站推荐,如何将简历翻译成英文?