首页 > 解决方案 > 为什么 IntelliJ IDEA 中的 SBT 项目会中断并需要重新创建?

问题描述

将 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 或其插件系统的基本设计

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

标签: intellij-ideasbtintellij-pluginsbt-ideaintellij-idea-2018

解决方案


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

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

sbt 仍然不允许保留 IDE 可以使用的输出的内存表示,因此 IDEA 的代码“图片”有时会与实际的编译输出不同,可能是因为语言和插件中的一些高级特性(宏倾向于例如)在 IDEA 数据结构中没有正确表示。

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

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

就在我们说话的时候,正在努力解决这种情况

  • 一个 scala LSP 实现正在制作中,它实际上将与底层构建工具连接,为任何兼容的编辑器(任何 LSP 客户端)提供有用的信息
  • 作为 LSP 工作的补充,正在探索BSP(构建服务器协议),其定义应允许不同的兼容构建工具(sbt、mill、cbt...)更好地与底层编译器和不同的编辑器集成

您可以在Scala 博客公告中找到更多信息


推荐阅读