IntelliJ 中的 Scala 编译错误:找不到输出目录

Scala compilation error in IntelliJ: could not find an output directory

IntelliJ IDEA(最新的社区版本)无法编译 dotty 编译器并出现错误:

scala.reflect.internal.FatalError: Could not find an output directory for
/src/contrib/dotty/scala-backend/src/compiler/scala/tools/nsc/backend/ScalaPrimitivesOps.scala
in List(
(/src/contrib/dotty/compiler/test-resources,/src/contrib/dotty/compiler/target/scala-2.12/classes),
(/src/contrib/dotty/compiler/target/scala-2.12/resource_managed/main,/src/contrib/dotty/compiler/target/scala-2.12/classes),
(/src/contrib/dotty/compiler/target/scala-2.12/src_managed/main,/src/contrib/dotty/compiler/target/scala-2.12/classes),
(/src/contrib/dotty/compiler/test,/src/contrib/dotty/compiler/target/scala-2.12/classes),
(/src/contrib/dotty/compiler/src,/src/contrib/dotty/compiler/target/scala-2.12/classes))

显然代码没有任何问题,而且 Dotty 似乎可以使用 sbt 正常编译,因为 run 命令有效。 sbt 项目是否需要做一些特殊的事情才能使用 sbt 进行 IDEA 编译? 是否是导致此错误的原因?否则,这个错误是什么意思?

重现

  1. 删除以前安装的任何设置后使用新安装的 IntelliJ IDEA。

  2. 使用git clone --recursive https://github.com/lampepfl/dotty

  3. 下载存储库
  4. 确保安装了最新版本的 sbt。 运行 sbt managedSources 来自项目的根目录。

  5. 使用 sbt 类型的设置 Import project from external model 和 Oracle JDK 1.8 导入 IntelliJ。否则保持默认值。

  6. 在项目资源管理器中右击项目并选择Load/Unload Modules...。卸载除 dottydotty-compilerdotty-librarydotty-interfaces 之外的所有模块。 (http://dotty.epfl.ch/docs/contributing/intellij-idea.html中列出的模块)

  7. 在项目资源管理器中,单击 compiler。从 Build 菜单中单击 Build Module 'dotty-compiler'

什么没有解决

它没有解决任何问题 File => Invalidate Caches/Restart.

它没有解决任何问题以保持所有模块加载。

根据我的经验,出现此类错误的一个原因是您是否在 shell 或类似的地方打开了输出文件夹。看起来有时 IDEA 会尝试删除整个文件夹,如果因为使用了该文件夹而不能这样做,它会神秘地导致这样的错误。

您可以尝试使用内置的 sbt shell 来编译 sbt 项目: