Scala、Cats、IntelliJ IDEA:终端SBT正常但IDE报错如何修复?
我之前也碰到过一模一样的糟心事!终端里SBT跑起来顺得很,但IntelliJ IDEA里写Cats相关代码时,红波浪线满天飞,编译还报错。折腾了好一阵终于找到几个靠谱的解决办法,按顺序试基本能搞定:
强制重新同步SBT项目
IDEA的SBT同步经常会“抽风”,尤其是更新依赖或Scala版本后。直接点右侧边栏的SBT面板,找到你的项目右键选Reload SBT Project;或者用快捷键(Windows/Linux是Ctrl+Shift+S,Mac是Cmd+Shift+S)触发同步。等IDEA重新索引完,很多红标直接就消失了。检查并更新Scala插件
Cats用到了不少Scala高级特性,旧版本的Scala插件对这些特性支持得不好。打开Settings/Preferences→Plugins,找到Scala插件看看是不是最新版,不是的话点Update更新,然后重启IDEA。另外要注意插件版本和项目Scala版本匹配——比如Scala 2.13.x就别用太老的插件。切换到SBT作为IDEA的编译工具
有时候IDEA自带的编译器会和SBT的编译逻辑不一致,导致报错。可以改成用SBT来编译:- 打开
Settings/Preferences→Build, Execution, Deployment→Build Tools→Scala Compiler - 找到你的模块,在
Compiler下拉菜单选SBT - 顺便去
Build, Execution, Deployment→Compiler→Java Compiler,确保Use compiler是javac,且版本和项目JDK匹配。
- 打开
清理IDEA缓存和索引
缓存或索引损坏会导致各种莫名其妙的错误。操作步骤:- 关闭项目回到IDEA欢迎界面
- 点击
File→Invalidate Caches... - 勾选
Clear file system cache and local history,然后点Invalidate and Restart
重启后IDEA会重新生成索引,这一步能解决很多顽固的语法标红问题。
检查Cats依赖与插件配置
确保build.sbt里的Cats依赖配置正确,没有版本冲突。比如用Cats 2.x的话,依赖应该是:libraryDependencies += "org.typelevel" %% "cats-core" % "2.9.0"如果用到了Cats的宏特性(比如
Derive),还要加kind-projector插件:addCompilerPlugin("org.typelevel" %% "kind-projector" % "0.13.2" cross CrossVersion.full)同步SBT后,IDEA应该能正确识别这些配置。
临时禁用实时语法检查(权宜之计)
如果上面的方法都没解决,作为临时替代,可以先关掉IDEA的实时语法检查,避免红标干扰开发,同时用终端SBT做编译测试:- 打开
Settings/Preferences→Editor→Inspections - 搜索
Scala,然后点击顶部的Disable All - 这样IDEA就不会乱标红了,你可以正常写代码,用
SBT compile或SBT test验证正确性。不过这只是临时办法,还是建议优先解决根本问题。
- 打开
内容的提问来源于stack exchange,提问作者ticofab

