IDEA中执行Grails命令时EvictableCache类报NoSuchMethodError错误
Grails 2.5.6 + Groovy 2.4.14 版本冲突问题解决
核心问题定位
- 抛出的
org.codehaus.groovy.runtime.memoize.EvictableCache.getAndPut方法不存在错误,结合堆栈中出现的AbstractExtensionMethodCache(仅Groovy 3及以上版本存在),说明运行时混入了高版本Groovy依赖,与项目要求的Groovy 2.4.14版本冲突。
排查与解决步骤
1. 定位高版本Groovy依赖来源
在模块目录下执行依赖分析命令,找出引入高版本Groovy的第三方依赖:
# Grails原生命令 grails dependency-report # 若项目使用Gradle ./gradlew dependencies
扫描输出中所有含groovy的条目,标记版本≥3.0的依赖项。
2. 强制统一Groovy版本
- 若使用Grails的
BuildConfig.groovy,在dependencies块中添加强制配置:dependencies { // 保留原有依赖,新增强制版本声明 force 'org.codehaus.groovy:groovy-all:2.4.14' } - 若使用Gradle,在
build.gradle中添加版本强制策略:configurations.all { resolutionStrategy.force 'org.codehaus.groovy:groovy-all:2.4.14' }
3. 清理缓存与重建项目
- 删除项目目录下的
.grails、.gradle、build、target目录 - 清理SDKMAN的Groovy缓存:
sdk flush groovy - 重启IDEA,执行
File → Invalidate Caches...,选择清理缓存并重启
4. 找到调用冲突方法的类文件
执行以下命令在本地缓存和项目目录中查找AbstractExtensionMethodCache.class:
find ~/.sdkman/candidates/groovy ~/.m2/repository ~/.grails -name "AbstractExtensionMethodCache.class"
找到后查看所在jar包的版本,确认高版本Groovy的来源。
5. 验证M1环境的JDK兼容性
确保使用的zulu8是ARM架构版本,执行以下命令验证:
java -version
输出中需包含aarch64标识,避免使用x86转译版本的JDK。
内容的提问来源于stack exchange,提问作者Pointy
相关产品推荐
相关产品推荐

