




spring boot 应用通过 java -jar 运行时秒退,但 mvn sprin

这是 Spring Boot 项目中一个典型但易被忽视的构建问题:可执行 JAR 的生成必须由 spring-boot-maven-plugin 完整参与,而非简单归档 class 文件。
VSCode 的 Java Project Manager(或部分轻量构建功能)往往仅执行 mvn compile 或基础 mvn package,跳过了 spring-boot-maven-plugin 的 repackage 目标。该插件的核心作用是:
若缺失上述任一环节(尤其是 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
⚠️ 注意事项:
? 额外验证技巧:
运行 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 ≠ 普通 JAR。Spring Boot 的“开箱即用”依赖于 spring-boot-maven-plugin 的深度定制。坚持使用 mvn clean package 构建,并通过 MANIFEST.MF 验证,即可彻底解决“JAR 启动即退出”问题。