IntelliJ运行Scala多模块SBT项目测试时出现DriverFs2Grpc重复定义错误的解决求助
解决IntelliJ IDEA运行Scala多模块SBT测试时重复定义自动生成代码的问题
我之前也碰到过IntelliJ和SBT自动生成源目录兼容的类似问题,结合自己的踩坑经验,给你几个可行的解决方案,你可以逐一尝试:
1. 重新同步SBT项目
IntelliJ的SBT缓存有时候会“卡住”,导致重复识别生成的源文件:
- 打开右侧的SBT面板,点击顶部的圆形刷新按钮
- 等项目同步完成后,再点绿色按钮跑测试试试
2. 检查并排除重复的源目录
IntelliJ可能误把target下的生成源目录多次标记为源根:
- 右键项目根目录,选「Open Module Settings」(或者直接按
F4) - 切换到「Modules」标签,找到你的目标模块,再点「Sources」子标签
- 看看是不是有多个条目指向
target/scala-2.12/src_managed/main/fs2-grpc,如果有,选中多余的那个,点顶部的红色「Exclude」按钮 - 保存修改后重启IntelliJ
3. 清理IntelliJ的缓存和索引
缓存损坏是这类奇怪问题的常见元凶:
- 点顶部菜单栏的「File」→「Invalidate Caches...」
- 勾选「Invalidate and Restart」,确认后等待IDE重启
- 重启完成后会自动重新构建索引,之后再尝试运行测试
4. 确认fs2-grpc的SBT配置正确
有时候插件配置不当会导致重复生成代码:
- 打开
plugins.sbt,确认fs2-grpc插件的版本适配你的Scala版本,比如:addSbtPlugin("org.typelevel" % "sbt-fs2-grpc" % "2.6.0") // 替换成你实际使用的版本 - 在模块的
build.sbt配置里,确保生成代码的包路径设置唯一:fs2GrpcCodeGeneratorSettings := fs2GrpcCodeGeneratorSettings.value.withPackage("packageX") - 先执行
sbt clean清理旧的生成文件,再跑sbt compile重新生成代码
5. 绕开IntelliJ测试运行器,直接用SBT任务跑
如果前面的方法都不管用,可以直接用SBT原生的测试任务:
- 右侧SBT面板找到你的模块,展开「test」目录,选「testOnly」
- 在弹出的输入框里输入
a.b.MySpec执行;或者直接在IntelliJ的终端里敲sbt testOnly a.b.MySpec
内容的提问来源于stack exchange,提问作者tharindu_DG
相关产品推荐
相关产品推荐

