Scala+IDEA:sbt和fsc的优缺点

10

我目前在使用 IDEA 的构建机制与 fsc 来进行 Scala 开发。它依然有一定的缓慢性,而且重新启动编译服务器也很痛苦。这里有很多人建议使用 SBT 作为构建工具并与 IDEA 一起使用。

你认为每种方法的利弊如何?


一些(部分)答案在http://stackoverflow.com/questions/3606591/why-does-intellij-idea-compile-scala-so-slowly。 - VonC
1个回答

10

我尝试了两种方式,最终我更喜欢直接使用sbt进行编译。

缺点? 我真的很想通过单击来跳转到编译错误并直接修复代码,但是......在sbt中进行编译要快得多。

Idea Scala插件的夜间构建质量/性能可能会有所不同,但最近一直在变得越来越好。Scala插件现在可以标记出许多之前需要运行compile才能捕捉到的错误。(例如,我正在运行夜间构建0.4.693,并且新的方法检查已经非常有用)。

对于在命令行上使用sbt的建议:尽可能长时间地交互式运行sbt,以利用所有加载和JIT编译。长时间运行的sbt最终会崩溃,但通过在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/

有用的插件


2
有一个 Emacs 插件可以让你在单独的缓冲区中使用 sbt,另一个插件可以使你点击 sbt 错误信息并跳转到源代码中相应的位置:http://stackoverflow.com/questions/4112838/emacs-ensime-and-sbt - axel22
那么没有办法将sbt编译错误传递到idea中吗?这是我对sbt的一个缺点的疑问。我以为sbt插件会处理这个问题。 - ziggystar
我以前从未使用过Idea,所以我无法确定是否有这样的插件。 - axel22
SBT还在积极开发中吗?他们现在已经有半年的RC0版本了。 - ziggystar
你能解释一下为什么你更喜欢sbt而不是fsc吗? - mbdev
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接