使用Sbt Remote Caching时Scoverage覆盖率数据丢失,如何缓存相关文件?
解决Sbt Remote Caching与Scoverage结合时覆盖率数据丢失的问题
可以将scoverage的测量文件纳入远程缓存范围,通过配置Sbt的远程缓存规则即可解决你遇到的FileNotFoundException问题。以下是具体配置和注意事项:
配置远程缓存包含scoverage文件
在你的build.sbt中添加以下配置,将scoverage的测量文件目录纳入远程缓存的包含列表:
ThisBuild / remoteCacheIncludes += "target/scala-*/scoverage-data/**"
这个规则会匹配所有Scala版本目录下的scoverage-data文件夹中的所有文件(包括那些带UUID命名的scoverage.measurements.*文件),确保这些文件在推送缓存时被上传,拉取缓存时被下载到本地。
错误原因说明
你遇到的文件找不到错误,是因为拉取远程缓存后,本地缺少测试执行时需要的scoverage测量文件。Scoverage在测试运行时会写入这些测量文件,后续步骤(比如生成覆盖率报告)需要读取这些文件,若缓存未包含它们,就会触发FileNotFoundException。
额外注意事项
- 合并测量文件:如果多次测试运行生成多个测量文件,Scoverage默认会合并这些文件生成最终报告,缓存包含所有文件后不会影响报告生成。
- CI环境验证:在CI环境中,确保远程缓存的推拉步骤正确应用了上述include规则,避免CI脚本遗漏相关配置。
- 测试验证:配置完成后,可通过以下流程验证:
- 本地运行测试生成scoverage文件
- 推送远程缓存
- 清理本地
target目录 - 拉取远程缓存
- 重新运行测试或生成覆盖率报告,确认不再报错
内容的提问来源于stack exchange,提问作者ClassNotFoundException
相关产品推荐
相关产品推荐

