簡體   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