Spring Boot 2.5.x与Gradle 8搭配时Boot Jar生成缺失的解决咨询
Spring Boot 2.5.x 搭配 Gradle 8 生成 Boot Jar 解决方案
问题场景
使用 Spring Boot 2.5.3 + Gradle 8 构建基础 Java 应用时,构建流程仅执行常规 jar 任务,未生成可执行的 Boot Jar,执行任务日志如下:
> Task :clean > Task :checkKotlinGradlePluginConfigurationErrors > Task :compileKotlin NO-SOURCE > Task :compileJava > Task :processResources > Task :classes > Task :jar > Task :assemble > Task :compileTestKotlin NO-SOURCE
将 Spring Boot 升级至 2.7 版本后,构建流程会正常触发 bootJar 任务,日志如下:
> Task :clean > Task :checkKotlinGradlePluginConfigurationErrors > Task :compileKotlin NO-SOURCE > Task :processResources > Task :classes > Task :bootJarMainClassName > Task :bootJar
项目插件配置如下:
kotlin("jvm") version "1.9.20" id("org.springframework.boot") version "2.5.3" id("io.spring.dependency-management") version "1.0.11.RELEASE" id("org.liquibase.gradle") version "2.1.1"
原因分析
Spring Boot 2.5.x 版本的 Gradle 插件与 Gradle 8 存在兼容性适配问题:默认情况下,bootJar 任务未被关联到 Gradle 构建生命周期的 assemble 阶段;而 Spring Boot 2.7 及后续版本修复了该适配逻辑,自动将 bootJar 纳入构建流程。
解决方法
1. 关联 bootJar 到 assemble 任务
在 build.gradle.kts 中添加配置,让 assemble 任务依赖 bootJar,这样执行 ./gradlew assemble 或 ./gradlew build 时会自动触发 Boot Jar 构建:
tasks.named("assemble") { dependsOn(tasks.named("bootJar")) }
2. 替换默认 jar 任务为 bootJar
如果希望构建时仅生成可执行 Boot Jar,而非同时生成普通 Jar,可以禁用默认 jar 任务并调整 bootJar 配置:
tasks.named("jar") { enabled = false } tasks.named("bootJar") { enabled = true archiveClassifier.set("") // 移除默认的"boot"后缀,让Jar文件名与普通Jar一致 }
3. 手动执行 bootJar 任务
无需修改配置,每次构建时直接执行指定任务:
./gradlew clean bootJar
内容的提问来源于stack exchange,提问作者user1555190
相关产品推荐
相关产品推荐

