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

IntelliJ运行Scala单元测试报java.lang.NoClassDefFoundError: scoverage/Invoker$错误

A needed class was not found. This could be due to an error in your runpath.
Missing class: scoverage/Invoker$
java.lang.NoClassDefFoundError: scoverage/Invoker$
根因说明

这个错误的本质是IntelliJ执行测试的逻辑和sbt原生逻辑不一致:IntelliJ编译测试代码时默认注入了scoverage覆盖率插桩逻辑,但运行测试时没有自动把scoverage的runtime依赖加入classpath,所以会出现类找不到的错误;sbt运行正常是因为sbt的scoverage插件会自动完成依赖引入、插桩、classpath配置的全流程,没有配置缺失问题。

可行修复方案
  • 方案1:关闭默认测试覆盖率开关
    打开 File -> Settings -> Build, Execution, Deployment -> Coverage,取消勾选 Enable coverage in test runs by default,删除所有已存在的旧测试运行配置,右键测试类/方法重新生成配置运行即可。
  • 方案2:强制IDEA使用sbt shell执行测试
    打开 File -> Settings -> Build, Execution, Deployment -> Build Tools -> sbt,勾选 Use sbt shell for build and run,后续IDEA运行测试会直接调用sbt原生命令,和命令行执行逻辑完全一致,不会出现类缺失问题。该方案是最稳妥的适配方式,不会出现IDE和构建工具行为不一致的各类问题。
  • 方案3:手动补全测试范围的scoverage依赖
    如果需要保留IDEA内置的覆盖率统计能力,在项目的build.sbt中添加对应版本的scoverage runtime依赖:
    // 版本需要和你项目中sbt-scoverage插件的版本完全匹配
    libraryDependencies += "org.scoverage" %% "scalac-scoverage-runtime" % "2.0.11" % Test
    
    添加后刷新sbt项目,重新运行测试即可。
  • 方案4:清理缓存重新导入项目
    如果上述方案都不生效,点击 File -> Invalidate Caches...,勾选 Clear file system cache and local history 后重启IDEA,等待项目重新索引完成后再运行测试。

内容的提问来源于stack exchange,提问作者Donald Duck

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:06:05