首页 > 解决方案 > Scala 代码通过命令行 sbt 编译,但在通过 Intellij Idea 编译时失败 - 如何设置 Intellij 以使用外部 sbt?

问题描述

我正在使用 macOS(发布时版本 10.15.4)上的 IntelliJ Idea CE(版本 2019.3.4)在纯 Scala 中编写解析器。该项目设置为 sbt 项目。

当我通过命令行运行sbt, then compile, then test(或只是sbtthen test)编译和测试项目时,一切正常。代码按预期编译,所有测试都通过。

但是,当我尝试通过 IntelliJ GUI 编译代码时,我收到以下错误消息:

Error:scala: Error while emitting Protobuf3Parser.scala
assertion failed: Invalid interfaces in LPredefinedType;: List(LFieldType;, Lscala/Product;)

问题代码似乎是

sealed trait FieldType
case class PredefinedType(t: DataType) extends FieldType
case class UserDefinedType(t: FullIdent) extends FieldType

哪里DataType是 asealed trait并且FullIdent是 a case class

此错误的输出与官方 Scala 语言存储库中的此错误产生的输出相似:https ://github.com/scala/bug/issues/10107 。虽然我不是 Scala 内部的专家,但我收到的错误似乎与 Scala 在 JVM 上表示其类型系统的方式有关。

据一位比我更熟悉 Scala 的同事说,JetBrains 有他们自己在 IntelliJ 中使用的编译器的实现,有时它的行为与官方的 Scala 实现不同——这可以解释这里发生了什么。

有没有办法将 IntelliJ 配置为使用外部 sbt 和 scalac 版本?

还是这个错误来自其他地方?

我已经尝试了很多 Google 搜索,并查看并尝试了不同的 IntelliJ 设置,但无济于事。

标签: scalaintellij-ideasbt

解决方案


有一种方法。转到设置,通过“构建、执行、部署”+“构建工具”+“sbt”向下钻取,您将在每个项目的基础上找到选择是否使用 sbt(“sbt shell”)进行构建的能力.


推荐阅读