【问题标题】:Scala code compiles through command-line sbt but fails when compiled through Intellij Idea - how set up Intellij to use external sbt?Scala 代码通过命令行 sbt 编译,但在通过 Intellij Idea 编译时失败 - 如何设置 Intellij 以使用外部 sbt?
【发布时间】:2020-07-16 06:37:07
【问题描述】:

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

当我通过命令行运行sbt,然后compile,然后test(或者只是sbt 然后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

其中DataTypesealed traitFullIdentcase class

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

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

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

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

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

【问题讨论】:

  • 尝试启用use sbt shell
  • 不幸的是,按照这些说明操作似乎不起作用。将 IDE 配置为使用“sbt”作为外部工具似乎确实有效,但不幸的是,这与使用命令行一样方便。

标签: scala intellij-idea sbt


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2020-05-10
    • 2011-03-21
    • 1970-01-01
    • 2018-05-07
    • 2016-05-06
    • 1970-01-01
    • 2016-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多