什么是最好的Scala生成系统?

我在这里看到关于IDE的问题 – 哪个是Scala开发最好的IDE? 目前Scala的工具状态是什么? ,但是我有与IDE的混合体验。 现在,我正在使用带有自动工作区刷新选项的Eclipse IDE,以及KDE 4的Kate作为我的文本编辑器。 以下是我想要解决的一些问题:

  1. 使用我自己的编辑器 IDE是真正面向每个人使用他们的组件。 我更喜欢凯特,但刷新系统是非常烦人的(它不使用inotify,而是可能是10s轮询间隔)。 我不使用内置文本编辑器的原因是因为自动完成function失效导致IDE挂起10秒钟。
  2. 仅重build修改的文件 Eclipse构build系统已损坏。 它不知道什么时候重build类。 我发现自己几乎有一半时间要进行项目 – >清理。 更糟糕的是,它似乎即使它完成我的项目后,几分钟后它会popup一些奇怪的错误( 编辑 – 这些错误似乎是以前解决了一个项目>干净,但后来又回来了。 ..)。 最后,如果“项目包含错误”设置“首选项/继续启动”为“提示”似乎对Scala项目没有影响(即,即使有错误也会启动)。
  3. 构build定制我可以使用“nightly”版本,但是我想要修改和使用我自己的Scala构build版本,而不是IDE内置的编译器。 将[例如] -Xprint:jvm传递给编译器(打印出更低的代码)也不错。
  4. 快速编译虽然Eclipse并不总是正确的,但它看起来很快 – 甚至比fsc更好。

我看着Ant和Maven,虽然还没有用过(我还需要花时间解决#3和#4)。 我想看看是否有人有其他build议,然后才花时间让次优build设系统工作。 提前致谢!

更新 – 我现在使用Maven,将项目作为编译器插件传递给它。 这似乎足够快, 我不确定Maven做了什么样的jarcaching。 当前的Scala 2.8.0版本可用[ 链接 ]。 原型非常酷,跨平台支持似乎非常好。 然而,关于编译问题,我不确定fsc是否实际上是固定的,或者我的项目足够稳定(例如类名不变) – 手动运行并不会影响我。 如果你想看一个例子,可以随意浏览我正在使用的[ github ]中的pom.xml文件。

更新2 – 从我看到的基准,Daniel Spiewak是正确的,build设者比Maven更快(如果一个正在做增量更改,Maven的10秒延迟变得烦人),所以如果可以制作兼容的构build文件,那么它可能值得…

点2和点4是非常难以pipe理与当前scalac。 问题在于Scala的编译器对构build文件有点笨拙。 基本上,无论你是否需要build立文件,它都会build立你所要的文件。 Scala 2.8.0在这方面将有一些巨大的改进,但在此之前… Eclipse SDT实际上有一些非常复杂(而且非常黑客)的代码来做变化检测和依赖性跟踪。 总的来说,它做得不错,但正如你所看到的,有皱纹。 Eclipse SDT 2.8.0将依靠前面提到的对scalac本身的改进。

所以,只build立修改过的文件几乎是不可能的。 除了SDT之外,我所知道的唯一一个甚至可以尝试的工具是SBT( 简单构build工具 )。 它使用编译器插件在编译时跟踪文件,并查询由编译器本身计算的依赖关系图。 实际上,这比重新编译世界的方法产生了大约50%的改进。 再一次,这是一个骇客来解决2.8.0以前版本的缺陷。

好消息是,即使不担心变化检测,合理快速的编译仍然是可以实现的。 FSC使用与Eclipse SDT使用的相同的技术(ooh,听起来像“Charlie Eppes”)来实现快速增量编译。 简而言之,它非常活泼。

我个人使用Apache Buildr 。 它的configuration比Maven或SBT的清洁程度要明显得多,而且它的启动时间比在MRI下运行时less了几个数量级。 它与FSC集成在一起,试图自己做一些基本的变化检测(相当原始)。 它还对主要的Scalatesting框架(ScalaTest,ScalaCheck和Spe​​cs)提供了自动的神奇支持,并且支持与Java源代码联合编译,以及用于IntelliJ和Eclipse的IDE元代。 哦,它支持所有的Maven的function(依赖解决scheme等),然后一些。 我甚至正在开发一个扩展,它允许与JavaRebel集成的交互式shell支持和支持几个shell提供程序(Scala,JIRB,Clojure REPL等)。 还没有准备好SVN,但是一旦准备就绪(可能在1.3.5的时候)。

正如你所看到的,我非常坚定地认为Buildr是最好的Scala构build工具。 它的文档在Scala方面有一点点缺陷,但是那是因为所有的东西都很直接,所以很难在没有感觉冗长的情况下进行文档化。 例如,你总是可以看看我的一个GitHub存储库 。 祝你好运!

你看过Intellij IDEA和它的Scala集成吗? Intellij在Java开发人员中拥有忠实(狂热?)的追随者,因此您可能会发现这适合您的需求。

我对Eclipse上的scala插件也很沮丧,我可以在列表中添加更多的问题:

  • 自动完成只有一些时间
  • debugging器不能正常工作(特别是在试图debuggingscala xml时)
  • debugging器忘记了断点
  • “去定义”不是经常工作。

我很高兴听到Buildr听起来像是一个更好的select(无论如何,build立在前面),我会给这个尝试 – 谢谢!

出于完整性的原因,我不得不说,也有裤子 – Twitter中使用的构build工具(早期的scala采用者之一)

它的主要区别在于,它不仅适用于scala(顺便说一句,用python编写),而且是在google构build系统之后build模的。

它不像以前那样臃肿,所以对于新生来说,它更简单,但我从来没有听说过在Twitter和Foursquare之外使用裤子的情况。

如果你害怕SBT,也许另一个没有那么受欢迎的构build工具ABT可以替代你呢?

我走在同一条路上,我在这里: – 经过一些初步调查,我放弃了凯特。 我喜欢将它用于大多数事情,但是当涉及到定义Tab完成等事情时,我发现它非常缺乏。 我build议你看一下gedit,而这对于Scala开发来说更加强大 – 用gedit作为我的编辑器,我使用SBT,并发现它是一个很好的构build工具。 我可以把它放到'testing'模式,当任何代码改变时,它重新编译相关文件并运行我的testing套件。 这是一个非常有效的工作方式。

我还没有看过Buildr。 我想说,我会的,但是诚实地说,在SBT的支配下,我不太需要看另一个构build工具。

如果您使用Emacs,我认为Ensime是一个非常好的IDE。 我认为在写这篇文章的时候,Ensime是唯一能够让你在Scala和Java对象上进行快速而准确的自动完成的IDE,包括隐式转换。

有使用Speedbar的代码浏览支持,使用优秀的Yasnippet的代码模板,以及使用Autocomplete的代码完成菜单。 这些都非常现代化,积极维护Emacs包。 Maven和SBT也提供了开箱即用的增量构build支持。

还有更多的内容,比如交互式debugging,重构和Scala解释器。 所有你想要的在Scala的现代IDE中都已经在Ensime中了。 强烈build议Emacsens。

如果你想使用Eclipse,但使用SBT构build项目,仍然可以debugging,请看这篇文章:

zikaprog.wordpress.com/2010/04/19/scala-eclipse-sbt-and-debugging/

它也可以适用于除了sbt以外的build设者。

Maven Scala插件的最新版本支持Zinc / Nailgun,以加快启动速度和更快的增量构build。 见锌和增量编译 。