Spring Boot Jar包启动后自动关闭问题排查求助
问题:Spring Boot Jar包启动后立刻终止,本地bootRun正常
我的Spring Boot项目在IntelliJ中执行gradle bootRun可正常运行,但通过Task->Build->Jar构建Jar包后,进入/build/libs目录,在PowerShell中执行java -jar jar-file.jar命令时,控制台输出启动日志后应用立刻终止。
控制台日志
. ____ _ __ _ _ /\ / ___'_ __ _ _(_)_ __ __ _ \ \\ \\ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \\ \\ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v3.2.0) 15:57:24.858 [main] INFO com.hipertrofiabet.ApplicationStart -- Starting ApplicationStart using Java 17.0.7 with PID 2736 (E:\my github repos\hipertrofia bet\static server\build\libs\hipertrofiabet-1.0-SNAPSHOT.jar started by SaluC in E:\my github repos\hipertrofia bet\static server\build\libs) 15:57:24.861 [main] INFO com.hipertrofiabet.ApplicationStart -- No active profile set, falling back to 1 default profile: "default" 15:57:25.081 [main] INFO com.hipertrofiabet.ApplicationStart -- Started ApplicationStart in 0.337 seconds (process running for 0.524)
项目核心代码
启动类
@SpringBootApplication public class ApplicationStart { public static void main(String[] args) { SpringApplication.run(ApplicationStart.class, args); } }
控制器
@Controller public class StaticController { @RequestMapping(path="/", method=RequestMethod.GET) public String indexPage() { return "index"; } }
build.gradle配置
buildscript { repositories { maven { url = uri("https://plugins.gradle.org/m2/") } } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:3.2.0") } } plugins { id "java" id "application" id "org.springframework.boot" version "3.2.0" } group "com.hipertrofiabet" version "1.0-SNAPSHOT" repositories { gradlePluginPortal() mavenCentral() } dependencies { implementation("org.springframework.boot:spring-boot:3.1.5") implementation("org.springframework.boot:spring-boot-autoconfigure:3.2.0") implementation("org.springframework.boot:spring-boot-starter-web:3.1.5") implementation("org.springframework.boot:spring-boot-devtools:3.1.5") implementation("org.springframework.boot:spring-boot-starter-thymeleaf:3.1.5") implementation("org.springframework.boot:spring-boot-starter-parent:3.1.5") implementation("org.springframework.boot:spring-boot-starter-tomcat:3.2.0") testImplementation("org.springframework.security:spring-security-test:6.2.0") implementation("org.springframework.security:spring-security-web:6.2.0") implementation("org.springframework.security:spring-security-core:6.2.0") implementation("org.springframework.boot:spring-boot-starter-actuator:3.2.0") // implementation("org.springframework.boot:spring-boot-starter-data-redis:3.1.5") // implementation("org.springframework.boot:spring-boot-starter-validation:3.1.5") implementation("org.yaml:snakeyaml:2.2") implementation("commons-io:commons-io:2.15.0") implementation("org.apache.commons:commons-lang3:3.13.0") compileOnly("org.projectlombok:lombok:1.18.30") annotationProcessor("org.projectlombok:lombok:1.18.30") testCompileOnly("org.projectlombok:lombok:1.18.30") testAnnotationProcessor("org.projectlombok:lombok:1.18.30") testImplementation(platform("org.junit:junit-bom:5.9.1")) testImplementation("org.junit.jupiter:junit-jupiter:5.9.2") implementation("org.jetbrains.kotlin:kotlin-script-runtime:1.9.0") } jar { manifest { attributes "Main-Class" : "com.hipertrofiabet.ApplicationStart" } duplicatesStrategy = "exclude" from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } } }
application.yml配置
server: port: 8081 address: 0.0.0.0 logging: level: web: INFO
问题原因及解决方法
核心问题
- 自定义Jar任务与Spring Boot插件冲突:Spring Boot插件自带
bootJar任务生成可执行Jar,你自定义的jar任务生成的是普通Jar,无法正确启动内嵌Tomcat,导致应用启动后直接退出。 - 依赖版本混乱:混合使用Spring Boot 3.1.5和3.2.0版本,引发类加载或容器初始化异常。
- 错误依赖配置:
spring-boot-starter-parent是父项目依赖,不应放在dependencies块中。
解决步骤
删除自定义Jar任务
直接移除build.gradle中整个jar代码块,Spring Boot插件会自动处理主类配置和可执行Jar打包逻辑。统一Spring Boot版本
将所有Spring Boot相关依赖版本统一为3.2.0(与插件版本一致),修正后的依赖块示例:dependencies { implementation("org.springframework.boot:spring-boot:3.2.0") implementation("org.springframework.boot:spring-boot-autoconfigure:3.2.0") implementation("org.springframework.boot:spring-boot-starter-web:3.2.0") implementation("org.springframework.boot:spring-boot-devtools:3.2.0") implementation("org.springframework.boot:spring-boot-starter-thymeleaf:3.2.0") implementation("org.springframework.boot:spring-boot-starter-tomcat:3.2.0") testImplementation("org.springframework.security:spring-security-test:6.2.0") implementation("org.springframework.security:spring-security-web:6.2.0") implementation("org.springframework.security:spring-security-core:6.2.0") implementation("org.springframework.boot:spring-boot-starter-actuator:3.2.0") implementation("org.yaml:snakeyaml:2.2") implementation("commons-io:commons-io:2.15.0") implementation("org.apache.commons:commons-lang3:3.13.0") compileOnly("org.projectlombok:lombok:1.18.30") annotationProcessor("org.projectlombok:lombok:1.18.30") testCompileOnly("org.projectlombok:lombok:1.18.30") testAnnotationProcessor("org.projectlombok:lombok:1.18.30") testImplementation(platform("org.junit:junit-bom:5.9.1")) testImplementation("org.junit.jupiter:junit-jupiter:5.9.2") implementation("org.jetbrains.kotlin:kotlin-script-runtime:1.9.0") }修正
spring-boot-starter-parent配置
移除dependencies中的spring-boot-starter-parent依赖,若需要使用父项目管理版本,在build.gradle顶部添加:plugins { id "java" id "org.springframework.boot" version "3.2.0" id "io.spring.dependency-management" version "1.1.4" // 用于依赖版本管理 } // 可选:通过BOM管理依赖版本,替代parent继承 dependencyManagement { imports { mavenBom org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES } }构建并运行
执行gradle bootJar构建可执行Jar,进入build/libs目录执行java -jar hipertrofiabet-1.0-SNAPSHOT.jar,应用将保持运行状态。
额外建议
- 移除
application插件,Spring Boot插件已包含相关功能。 - 生产环境建议移除
spring-boot-devtools,或通过配置禁用其自动重启功能。
内容的提问来源于stack exchange,提问作者Salu Ramos
相关产品推荐
相关产品推荐

