导入到 IntelliJ IDEA

目标

我想将 sbt 构建导入 IntelliJ IDEA。

步骤

IntelliJ IDEA 是 JetBrains 开发的 IDE,Community Edition 在 Apache v2 许可证下开源。IntelliJ 可与多种构建工具(包括 sbt)集成以导入项目。

要将构建导入 IntelliJ IDEA:

  1. 在插件页安装 Scala 插件:
    IntelliJ
  2. 在「项目」中打开包含 build.sbt 文件的目录。
    IntelliJ
  3. 导入完成后,打开 Scala 文件以确认代码补全可用。

IntelliJ Scala 插件使用自带的轻量编译引擎检测错误,速度快但有时不准确。按 compiler-based highlighting 所述,可将 IntelliJ 配置为使用 Scala 编译器进行错误高亮。

使用 IntelliJ IDEA 交互式调试

  1. IntelliJ 支持在代码中设置断点进行交互式调试:
    IntelliJ
  2. 您可在单元测试上右键,选择 "Debug '<test name>'." 也可点击编辑器左侧单元测试旁的绿色 "run" 图标。测试命中断点时,可查看变量取值:
    IntelliJ

交互式调试会话中的操作方式,详见 IntelliJ 文档中的 Debug Code 页面。

其他方式

将 sbt 用作 IntelliJ IDEA 构建服务器(进阶)

将构建导入 IntelliJ 意味着编码时实际以 IntelliJ 作为构建工具与编译器(另见 compiler-based highlighting)。许多用户满意这种体验,但依代码库不同,部分编译错误可能为误报,与生成源码的插件配合也可能不佳,且您可能希望与 sbt 完全一致的构建语义。所幸现代 IntelliJ 通过 Build Server Protocol(BSP)支持包括 sbt 在内的其他 构建服务器

在 IntelliJ 中使用 BSP 的好处是由 sbt 承担实际构建,因此若您习惯在旁边开着 sbt 会话,可避免重复编译。

Import to IntelliJ BSP with IntelliJ
Reliability ✅ Reliable behavior ⚠️ Less mature. Might encounter UX issues.
Responsiveness ⚠️
Correctness ⚠️ Uses its own compiler for type checking, but can be configured to use scalac ✅ Uses Zinc + Scala compiler for type checking
Generated source ❌ Generated source requires resync
Build reuse ❌ Using sbt side-by-side requires double build

要在 IntelliJ 上将 sbt 用作构建服务器:

  1. 在插件页安装 Scala 插件。
  2. 若采用 BSP 方式,请关闭 IntelliJ,并删除已存在的 .idea 目录(如有)。
  3. 在终端运行 sbt bspConfig 以生成 .bsp 目录。
  4. 打开 IntelliJ,并打开 build.sbt 文件。出现提示时选择 BSP project
    IntelliJ
  5. 导入完成后,打开 Scala 文件以确认代码补全可用:
    IntelliJ

使用以下设置可使部分子项目不参与 BSP。

bspEnabled := false
  • 打开 Preferences,搜索 BSP,勾选 "build automatically on file save",并取消勾选 "export sbt projects to Bloop before import":
    IntelliJ

修改代码并保存(在 macOS 上为 Cmd-S)时,IntelliJ 会调用 sbt 执行实际构建。

更多说明另见 Igal Tabachnik 的 Using BSP effectively in IntelliJ and Scala

登录 sbt 会话

您也可通过瘦客户端登录已有的 sbt 会话。

  • 在终端面板中输入 sbt --client IntelliJ

这样可登录 IntelliJ 已启动的 sbt 会话。在其中可调用 testOnly 等任务,且代码已编译。