繁体   English   中英

Scala 代码通过命令行 sbt 编译但通过 Intellij Idea 编译时失败 - 如何设置 Intellij 以使用外部 sbt?

[英]Scala code compiles through command-line sbt but fails when compiled through Intellij Idea - how set up Intellij to use external sbt?

我正在使用 IntelliJ Idea CE(版本 2019.3.4)在 macOS(发布时版本 10.15.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

其中DataType是一个sealed trait ,而FullIdent是一个case class

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

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

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

或者这个错误是否来自其他地方?

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

有一种方法。 Go 到设置,向下钻取“构建、执行、部署”+“构建工具”+“sbt”,您会发现每个项目都可以选择是否使用 sbt(“sbt shell”)进行构建.

那天有点晚了,但我尝试了两个小时,最后我点击了底部的构建和同步和魔法瞧,它添加了外部库并且它起作用了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM