【问题标题】:Scala+IDEA: Pros and cons of sbt and fscScala+IDEA:sbt 和 fsc 的优缺点
【发布时间】:2025-11-27 05:30:01
【问题描述】:

我目前正在使用带有 fsc 的 IDEA 构建机制来使用 Scala 进行开发。它仍然有点慢,不得不(重新)启动编译服务器是一件痛苦的事情。这里有很多人建议将 SBT 与 IDEA 一起作为构建工具。

您认为每种方法的优缺点是什么?

【问题讨论】:

标签: scala intellij-idea sbt


【解决方案1】:

我都试过了,最后我更喜欢直接 sbt 来编译。

缺点?我真的很怀念能够点击编译错误并直接修复代码,但是......在 sbt 中编译要快得多。

Idea Scala 插件的每晚构建在质量/性能方面可能会有所不同,但最近它变得越来越好。 Scala 插件现在可以标记一些在我必须运行编译才能捕获的错误。 (例如,我在夜间运行构建 0.4.693,新方法检查已经非常有用。)

我对在命令行上使用 sbt 的建议:启动 sbt 并让它尽可能长时间地以交互方式运行,以利用所有正在加载和 JIT-ed 的东西。

sbt left running 最终会失败,但通过在 sbt 包装器中为其提供更多内存,您可以很少发生这种情况。

这是适合我的 sbt 启动包装器。

java -Xms512M -Xmx1500M -XX:MaxPermSize=512m -jar `dirname $0`/sbt-launch.jar "$@"

我对 sbt 0.7 的最大问题是它经常返回并重新编译大量文件,这些文件似乎与我实际更改的代码无关。 (即便如此,还是比 Idea 和 fsc 快!)

好消息:sbt 0.9 有一些很棒的增量编译改进。不幸的是,从 0.7 到 0.9 的迁移路径仍处于早期阶段。 Mark Harrah 在 NEScala 的演讲在线http://www.nescala.org/2011/,如果您有兴趣。

有用的插件

【讨论】:

  • 有一个 Emacs 插件允许您在单独的缓冲区中使用 sbt,另一个允许您单击 sbt 错误消息,跳转到源代码中的适当位置:*.com/questions/4112838/emacs-ensime-and-sbt跨度>
  • 所以没有办法将 sbt 编译错误转化为想法?这是我想知道的 sbt 的缺点之一。认为 sbt 插件会处理这个问题。
  • 之前没用过idea,不知道有没有这样的插件。
  • 我不是 emacs 用户,但是带有 ENSIME 的 emacs 非常好用。有一个Idea SBT插件,github.com/orfjackal/idea-sbt-plugin,不过我刚刚习惯了命令行。
  • SBT 是否仍在积极开发中?他们这个 RC0 已经有半年了。