升级Spring Boot 3.0.x后Gradle无法解析Ehcache依赖求助
Spring Boot 3.0迁移Ehcache依赖时版本解析失败问题
问题背景
将Spring Boot Gradle项目从2.7.x升级至3.0.4版本,原Ehcache依赖声明:
api 'org.ehcache:ehcache'
按迁移指南修改为:
api('org.ehcache:ehcache') { capabilities { requireCapability('org.ehcache:ehcache-jakarta') } }
执行./gradlew build时触发依赖解析错误:
FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':compileJava'. > Could not resolve all files for configuration ':compileClasspath'. > Could not find org.ehcache:ehcache:. Required by: project :
尝试api 'org.ehcache:ehcache-jakarta'、api 'org.ehcache:ehcache:jakarta'均无效,仅手动指定版本api 'org.ehcache:ehcache:3.10.8:jakarta'可正常构建,但疑惑为何Spring Boot未自动管理版本(当前Gradle Wrapper版本7.6.1)。
解决方案
1. 确保依赖管理插件正确应用
Spring Boot的依赖版本管理依赖于io.spring.dependency-management插件,必须在build.gradle中正确配置:
plugins { id 'org.springframework.boot' version '3.0.4' id 'io.spring.dependency-management' version '1.1.0' id 'java' }
2. 正确声明Ehcache Jakarta依赖
在依赖块中使用能力声明的同时,确保依赖管理已导入Spring Boot BOM:
dependencies { api('org.ehcache:ehcache') { capabilities { requireCapability('org.ehcache:ehcache-jakarta') } } } dependencyManagement { imports { mavenBom org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES } }
3. 可选:显式锁定Ehcache版本(若仍有问题)
如果上述配置仍无法自动解析版本,可在dependencyManagement中显式指定版本(Spring Boot 3.0.4默认管理的Ehcache版本为3.10.8):
dependencyManagement { imports { mavenBom org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES } dependencies { dependency 'org.ehcache:ehcache:3.10.8' } }
原因说明
- Spring Boot 3.0切换到Jakarta EE规范,Ehcache通过**能力(capability)**机制区分Jakarta和Java EE版本,直接声明
ehcache-jakarta无效是因为Spring Boot依赖管理未维护该artifactId的版本映射。 - 手动指定版本有效是因为跳过了依赖管理的能力解析流程,但会失去Spring Boot版本同步的优势。
- Gradle 7.6.1完全支持该能力声明机制,版本本身无兼容性问题,核心问题是依赖管理配置不完整。
内容的提问来源于stack exchange,提问作者Maarten1985
相关产品推荐
相关产品推荐

