You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 14:55:23