Gradle与Spring Boot升级后bootRun编译失败问题求助
问题描述
- 原有Spring Boot应用使用Gradle 6.3、Spring Boot 2.3.0.RELEASE、dependency-management 1.0.15.RELEASE,运行正常
- 升级至Gradle 8.5、Spring Boot 3.2.3、dependency-management 1.1.5后,系统已安装Java 21,
./gradlew clean执行成功,但clean build和bootRun命令失败 - 报错信息:compileJava任务失败,无法解析spring-boot-starter-data-mongodb等依赖,原因是组件兼容Java 17,但项目配置的
sourceCompatibility为Java 8 - 尝试回退旧版本时,提示版本号65不支持,无法正常运行
- 疑问:是否需要将Gradle 8.5添加到系统环境变量中?
相关配置
build.gradle
plugins { id 'org.springframework.boot' version '3.2.3' id 'io.spring.dependency-management' version '1.1.5' id 'java' id 'war' } group = 'com.djamware' version = '0.0.1-SNAPSHOT' sourceCompatibility = '1.8' repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-mongodb' implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect:2.4.1' providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat' testImplementation('org.springframework.boot:spring-boot-starter-test') { exclude group: 'org.junit.vintage', module: 'junit-vintage-engine' } testImplementation 'org.springframework.security:spring-security-test' } test { useJUnitPlatform() }
gradle-wrapper.properties
distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists
解决方案
核心问题:Java版本兼容冲突
Spring Boot 3.x要求最低Java 17,而项目仍配置sourceCompatibility = '1.8',导致依赖库(如spring-boot-starter-data-mongodb)因基于Java 17编译,无法在Java 8编译环境下解析。调整Java版本配置
修改build.gradle中的Java版本配置,与系统安装的Java 21匹配:sourceCompatibility = '21' targetCompatibility = '21'Gradle环境变量说明
不需要将Gradle 8.5添加到系统环境变量。通过./gradlew执行时使用的是Gradle Wrapper,它会自动下载并使用gradle-wrapper.properties中指定的Gradle版本,不受系统环境变量影响。回退旧版本失败原因
回退时提示"版本号65不支持",是因为Java 21对应的class文件版本为65,而旧版Gradle 6.3不支持Java 21。若要回退旧版本,需同时切换到兼容Java 8的JDK版本。
内容的提问来源于stack exchange,提问作者Anbuchelvan K
相关产品推荐
相关产品推荐

