升级至JDK 17与Gradle 7.4.2后bootJar任务构建失败求助
问题根源
你遇到的bootInf属性缺失注解的错误,本质是Spring Boot 2.1.x版本的Gradle插件与Gradle 7.x不兼容。Gradle 7.x开始严格检查任务属性的输入/输出注解,而旧版Spring Boot插件的BootJar类中bootInf属性未添加必要注解,触发了这个校验错误。同时,Spring Boot 2.1.x本身不支持JDK17,这也会带来潜在的兼容性问题。
解决方案
必须升级Spring Boot版本到支持Gradle 7.x和JDK17的分支,推荐使用Spring Boot 2.7.x系列(这是支持JDK17的最低稳定分支,且完全兼容Gradle 7.4.2)。以下是具体修改步骤:
升级Spring Boot Gradle插件版本
修改buildscript中的插件依赖版本,同时移除已停止维护的jcenter()仓库:buildscript { repositories { mavenLocal() maven { url "https://plugins.gradle.org/m2/" } mavenCentral() } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:2.7.17") // 替换为2.7.x最新稳定版 classpath("net.researchgate:gradle-release:3.0.2") // 升级gradle-release兼容Gradle7 classpath("com.bmuschko:gradle-docker-plugin:7.3.0") // 升级docker插件兼容版本 classpath("gradle.plugin.org.hidetake:gradle-swagger-generator-plugin:2.20.0") // 升级swagger插件 } }同步升级Spring Boot依赖版本
统一dependencies中的Spring Boot starter依赖版本,同时移除多余的插件依赖:dependencies { // 移除仅需在buildscript中声明的spring-boot-gradle-plugin依赖 // implementation("org.springframework.boot:spring-boot-gradle-plugin:2.1.1.RELEASE") implementation("org.springframework.boot:spring-boot-starter-web:2.7.17") implementation("org.springframework.boot:spring-boot-starter-json:2.7.17") implementation("org.springframework.boot:spring-boot-starter-actuator:2.7.17") testImplementation("org.springframework.boot:spring-boot-starter-test:2.7.17") // 其他依赖保持不变,若有版本冲突需同步调整 }调整Spring Boot配置
Spring Boot 2.7.x中mainClassName已被mainClass替代,修改springBoot块:springBoot { mainClass.set("com.somethingSomething.ServiceApplication") buildInfo() }清理过时仓库配置
从项目根repositories中移除jcenter(),改用mavenCentral()即可满足依赖拉取需求。
额外说明
- 关于
compileJava的unchecked警告:这是代码中使用未指定泛型的集合等操作导致的,可添加-Xlint:unchecked参数查看具体位置,但不影响构建,若要修复需调整对应代码。 - 插件兼容性:确保所有Gradle插件版本都适配Gradle 7.4.2,上述示例中已给出兼容版本参考。
完成以上修改后,重新执行./gradlew build即可解决bootJar任务的错误,同时确保项目在JDK17环境下正常运行。
内容的提问来源于stack exchange,提问作者Muhammed Abid Rahman Chowdhury

