将Gradle配置迁移至Gradle 8.2并解决编译弃用警告
问题
我有以下Gradle配置:
plugins { id 'org.springframework.boot' version '2.6.15' id 'io.spring.dependency-management' version '1.1.0' id 'java' } group = 'com.test' version = '0.0.1' java { sourceCompatibility = '17' } configurations { compileOnly { extendsFrom annotationProcessor } } ext { set('springCloudVersion', "2021.0.8") } repositories { mavenCentral() maven { url "http://192.168.1.111/repository" allowInsecureProtocol = true } } configurations { configureEach { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-web' } } dependencies { implementation 'org.springframework.boot:spring-boot-starter-actuator' implementation 'org.springframework.cloud:spring-cloud-starter-bootstrap' annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor' testImplementation 'org.junit.jupiter:junit-jupiter-api' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' } dependencyManagement { imports { mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}" } resolutionStrategy { cacheDynamicVersionsFor 0, "seconds" cacheChangingModulesFor 0, "seconds" } } tasks.named('test') { useJUnitPlatform() }
编译时出现如下提示:
The Project.getConvention() method has been deprecated. This is scheduled to be removed in Gradle 9.0. Consult the upgrading guide for further information: https://docs.gradle.org/8.2/userguide/upgrading_version_8.html#deprecated_access_to_conventions The org.gradle.api.plugins.Convention type has been deprecated. This is scheduled to be removed in Gradle 9.0. Consult the upgrading guide for further information: https://docs.gradle.org/8.2/userguide/upgrading_version_8.html#deprecated_access_to_conventions The org.gradle.api.plugins.JavaPluginConvention type has been deprecated. This is scheduled to be removed in Gradle 9.0. Consult the upgrading guide for further information: https://docs.gradle.org/8.2/userguide/upgrading_version_8.html#java_convention_deprecation
请问如何正确迁移该配置以适配Gradle 8.2?
迁移适配Gradle 8.2的配置方案
这些警告来自Spring Boot和Spring Cloud依赖管理插件对Gradle旧API(Convention相关)的调用,通过升级插件版本、优化配置写法即可解决:
核心修改点
- 升级Spring Boot插件版本:将插件升级到支持Gradle 8.x的2.7.x稳定分支(示例用2.7.14)
- 升级依赖管理插件版本:对应升级
io.spring.dependency-management到1.1.5,适配新版Spring Boot - 规范Java版本配置:替换旧写法为Gradle 8推荐的工具链配置,避免环境不一致问题
- 合并重复配置块:将两个
configurations块合并,精简配置结构
修改后的完整配置
plugins { id 'org.springframework.boot' version '2.7.14' id 'io.spring.dependency-management' version '1.1.5' id 'java' } group = 'com.test' version = '0.0.1' java { // Gradle 8推荐的工具链配置,自动匹配对应JDK toolchain { languageVersion = JavaLanguageVersion.of(17) } // 若需保留原写法,可替换为: // sourceCompatibility = '17' } configurations { compileOnly { extendsFrom annotationProcessor } // 合并exclude配置到同一块 configureEach { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-web' } } ext { set('springCloudVersion', "2021.0.8") } repositories { mavenCentral() maven { url "http://192.168.1.111/repository" allowInsecureProtocol = true } } dependencies { implementation 'org.springframework.boot:spring-boot-starter-actuator' implementation 'org.springframework.cloud:spring-cloud-starter-bootstrap' annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor' testImplementation 'org.junit.jupiter:junit-jupiter-api' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' } dependencyManagement { imports { mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}" } resolutionStrategy { cacheDynamicVersionsFor 0, "seconds" cacheChangingModulesFor 0, "seconds" } } tasks.named('test') { useJUnitPlatform() }
补充说明
- 插件版本升级是消除
Convention废弃警告的核心,新版插件已移除对旧Gradle API的依赖 - Java工具链配置可让Gradle自动下载对应版本JDK(本地缺失时),是Gradle官方推荐的版本管理方式
- 合并配置块仅为优化结构,不影响功能,但能让配置更整洁易维护
内容的提问来源于stack exchange,提问作者Peter Penzov
相关产品推荐
相关产品推荐

