scala - Scala 代码通过命令行 sbt 编译,但在通过 Intellij Idea 编译时失败 - 如何设置 Intellij 以使用外部 sbt?
问题描述
我正在使用 macOS(发布时版本 10.15.4)上的 IntelliJ Idea CE(版本 2019.3.4)在纯 Scala 中编写解析器。该项目设置为 sbt 项目。
当我通过命令行运行sbt
, then compile
, then test
(或只是sbt
then 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 设置,但无济于事。
解决方案
有一种方法。转到设置,通过“构建、执行、部署”+“构建工具”+“sbt”向下钻取,您将在每个项目的基础上找到选择是否使用 sbt(“sbt shell”)进行构建的能力.
推荐阅读
- python - 如何为 ML 模型正确构建数据以对其进行解释
- postgresql - Postgres在没有主键的大表中删除重复项的最佳方法
- snowflake-cloud-data-platform - 是否可以在数据库中任何模式的所有未来表上授予 SELECT 权限?
- php - PHP 在验证之前检测它是常量还是字符串
- ionic-framework - IONIC 5 ionic serve 产生错误:NGCC failed
- python - 在 pyton 中使用正则表达式在字符串中只保留字母和数字
- r - R在Excel上修改后误读csv文件
- python - Scrapy shell 请求与响应不匹配?
- javascript - 更快的方法来迭代/检查表格并替换谷歌脚本/javascript中的单元格值?
- javascript - JSON.stringify() 丢失嵌套属性 我知道原因但不知道答案