为什么IntelliJ IDEA中的SBT项目会中断并需要重新创建?

时间:2018-10-11 05:05:36

标签: intellij-idea sbt intellij-plugin sbt-idea intellij-idea-2018

当将SBT与IntelliJ IDEA一起使用时,项目常常会陷入一种糟糕的状态,即在终端中不发生编译器错误的情况下,本来应该发生的错误不会发生。

一个项目将sbt compile在终端中没有问题,但是将保留在IntelliJ IDEA中,直到我删除.idea目录并单击“从现有资源创建新项目”。

在IntelliJ中配置SBT项目以使用SBT Shell根本没有帮助。

首先,为什么会这样?哪些因素导致了该问题:

  1. SBT中的错误
  2. 破坏了IntelliJ IDEA的核心或插件系统
  3. IntelliJ IDEA SBT插件中的错误
  4. SBT 1.2或更早版本的基本设计
  5. IntelliJ IDEA或其插件系统的基本设计

最后,如何避免这种破损?

1 个答案:

答案 0 :(得分:0)

据我所知,Intellij IDEA创建了自己的内存结构来表示已解析文件的实际状态,直至可以启用从IDE中获得的所有有用功能(表示形式,引用,用法,文档,编译器错误,...)。

此模型不是sbt构建的输出。借助该插件,IDE可以基于sbt构建文件创建这种内存中表示形式,并且最近可以使用sbt引擎本身(您需要在首选项中启用它)。

仍然sbt不允许保留IDE可以使用的输出的内存表示形式,因此IDEA的代码“图片”有时会与实际的编译输出有所不同,这可能是由于语言和插件的某些高级功能所致(例如,宏通常会这样做)在IDEA数据结构中无法正确表示。

通常,当您更改构建文件中的某些内容时,IDEA会自动刷新构建状态或提示您执行构建状态(当聚焦于构建文件编辑器时)。这应该足以使构建与IDE“对齐”。

然而,在许多情况下,复杂的代码库会在IDE中永久显示错误错误。

正如我们所说的那样,我们正在为解决这种情况进行许多努力

  • 正在开发一个scala LSP implementation,它实际上将与基础构建工具连接以向任何兼容的编辑器(任何LSP客户端)提供有用的信息
  • 与LSP工作互补的是,正在探索BSP (build server protocol),其定义应允许不同的兼容构建工具(sbt,mill,cbt等)更好地与基础编译器和不同的编辑器集成

您可以在Scala Blog Announcement

上找到更多信息。