导入到 IntelliJ IDEA
目标
我想将 sbt 构建导入 IntelliJ IDEA。
步骤
IntelliJ IDEA 是 JetBrains 开发的 IDE,Community Edition 在 Apache v2 许可证下开源。IntelliJ 可与多种构建工具(包括 sbt)集成以导入项目。
要将构建导入 IntelliJ IDEA:
- 在插件页安装 Scala 插件:

- 在「项目」中打开包含
build.sbt文件的目录。

- 导入完成后,打开 Scala 文件以确认代码补全可用。
IntelliJ Scala 插件使用自带的轻量编译引擎检测错误,速度快但有时不准确。按 compiler-based highlighting 所述,可将 IntelliJ 配置为使用 Scala 编译器进行错误高亮。
使用 IntelliJ IDEA 交互式调试
- IntelliJ 支持在代码中设置断点进行交互式调试:

- 您可在单元测试上右键,选择 "Debug '<test name>'." 也可点击编辑器左侧单元测试旁的绿色 "run" 图标。测试命中断点时,可查看变量取值:

交互式调试会话中的操作方式,详见 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 用作构建服务器:
- 在插件页安装 Scala 插件。
- 若采用 BSP 方式,请关闭 IntelliJ,并删除已存在的
.idea目录(如有)。 - 在终端运行
sbt bspConfig以生成.bsp目录。 - 打开 IntelliJ,并打开
build.sbt文件。出现提示时选择 BSP project:

- 导入完成后,打开 Scala 文件以确认代码补全可用:

使用以下设置可使部分子项目不参与 BSP。
bspEnabled := false
- 打开 Preferences,搜索 BSP,勾选 "build automatically on file save",并取消勾选 "export sbt projects to Bloop before import":

修改代码并保存(在 macOS 上为 Cmd-S)时,IntelliJ 会调用 sbt 执行实际构建。
更多说明另见 Igal Tabachnik 的 Using BSP effectively in IntelliJ and Scala。
登录 sbt 会话
您也可通过瘦客户端登录已有的 sbt 会话。
- 在终端面板中输入
sbt --client
这样可登录 IntelliJ 已启动的 sbt 会话。在其中可调用 testOnly 等任务,且代码已编译。