Scala код компилируется через командную строку sbt, но завершается неудачно при компиляции через Intellij Idea - как настроить Intellij для использования внешнего sbt? - PullRequest
1 голос
/ 04 апреля 2020

Я пишу парсер в чистом виде Scala с IntelliJ Idea CE (версия 2019.3.4) на macOS (версия 10.15.4 на момент публикации). Проект настроен как проект 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.

Вывод этой ошибки выглядит аналогично выводу этой ошибки из официального языкового репозитория Scala: https://github.com/scala/bug/issues/10107. Хотя я не эксперт по внутренним элементам Scala, полученная мною ошибка, похоже, связана с тем, что Scala представляет систему типов в JVM.

По словам коллеги, более знакомого с Scala чем я, у JetBrains есть собственная реализация компиляторов, которые они используют внутри самого IntelliJ, и иногда его поведение отличается от официальной Scala реализации - что объясняет, что здесь происходит.

Есть ли способ настроить IntelliJ использовать внешнюю версию sbt и scalac?

Или эта ошибка возникла откуда-то еще?

Я пробовал довольно много поисков в Google и просмотрел и экспериментировал с разными настройками IntelliJ, но безрезультатно.

1 Ответ

0 голосов
/ 04 апреля 2020

Есть способ. Go Настройки, детализируйте «Сборка, Выполнение, Развертывание» + «Инструменты сборки» + «sbt», и там вы найдете для каждого проекта возможность выбора, использовать ли sbt («оболочка sbt») для сборок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...