我在这里看到过关于IDE的问题 - Which is the best IDE for Scala development?和What is the current state of tooling for Scala?,但我对IDE有过不同的经验。现在,我正在使用带有自动工作区刷新选项的Eclipse IDE,以及KDE 4的Kate作为我的文本编辑器。以下是我想解决的一些问题:
-Xprint:jvm
传递给编译器(打印出降低的代码)也很好。fsc
还要好。我看了Ant和Maven,虽然还没有雇用(我还需要花时间解决#3和#4)。在我花时间让一个次优的构建系统工作之前,我想看看是否有人有其他建议。提前谢谢!
UPDATE - 我现在正在使用Maven,将项目作为编译器插件传递给它。看起来足够快;我不确定Maven的缓存是什么样的jar。 Scala 2.8.0的当前存储库可用[link]。原型非常酷,跨平台支持似乎非常好。但是,关于编译问题,我不确定fsc是否实际修复,或者我的项目是否足够稳定(例如类名不会改变) - 手动运行它并不会让我感到烦恼。如果您想查看示例,请随意浏览我正在使用[github]的pom.xml文件。
更新2 - 从我看过的基准测试中,Daniel Spiewak说得对,构建器的速度比Maven快(并且,如果正在进行增量更改,Maven的10秒延迟会变得很烦人),所以如果有的话可以制作一个兼容的构建文件,那么它可能是值得的......
答案 0 :(得分:34)
点2和4 极难以使用当前的scalac进行管理。问题是Scala的编译器对于构建文件有点愚蠢。基本上,它会构建您提供的任何内容,无论该文件是否真的需要构建。 Scala 2.8.0在这方面会有一些巨大的改进,但在那之前...... Eclipse SDT实际上有一些非常精细(和非常hackish)的代码用于进行变更检测和依赖性跟踪。总的来说,它做得不错,但正如你所看到的,有皱纹。 Eclipse SDT 2.8.0将依赖于对scalac本身的上述改进。
因此,构建仅修改过的文件几乎是不可能的。除了SDT之外,我所知道的唯一一个甚至尝试过这个的工具是SBT(Simple Build Tool)。它使用编译器插件在编译时跟踪文件,并查询编译器本身计算的依赖图。在实践中,这比重新编译世界的方法产生了大约50%的改进。再次,这是一个解决2.8.0之前的scalac缺陷的黑客。
好消息是,即使不担心变化检测,仍然可以实现合理快速的编译。 FSC使用Eclipse SDT用于实现快速增量编译的相同技术(噢,听起来像是“Charlie Eppes”)。简而言之,它非常活泼。
就个人而言,我使用Apache Buildr。它的配置比Maven或SBT更清洁,其启动时间少了几个数量级(在MRI下运行时)。它与FSC集成,并尝试自己进行一些基本的变化检测(相当原始)。它还对主要的Scala测试框架(ScalaTest,ScalaCheck和Specs)提供自动魔术支持,并支持使用Java源和IntelliJ和Eclipse的IDE元生成联合编译。哦,它支持所有Maven的功能(依赖解析等),然后一些。我甚至正在开发一个扩展,它允许与JavaRebel集成的交互式shell支持并支持几个shell提供程序(Scala,JIRB,Clojure REPL等)。它还没有为SVN做好准备,但是一旦它准备好了我就会做好准备(可能及时为1.3.5)。
正如您所看到的,我非常坚定地认为Buildr是最好的Scala构建工具。它的文档在Scala方面有点不合理,但那是因为一切都是如此简单,以至于很难在不感到啰嗦的情况下进行记录。您可以随时查看my GitHub repositories中的一个示例。祝你好运!
答案 1 :(得分:6)
你看过Intellij IDEA及其Scala integration吗? Intellij在Java开发人员中有忠诚(狂热?),因此您可能会发现这适合您的需求。
答案 2 :(得分:4)
我对Eclipse上的scala插件感到非常沮丧,我可以在列表中添加一些问题:
我很高兴听到Buildr听起来像是一个更好的选择(无论如何在构建方面),我会尝试一下 - 谢谢!
答案 3 :(得分:4)
如果您使用Emacs,我认为Ensime是一个非常好的IDE。我认为在撰写本文时,Ensime是唯一能够为您提供Scala和Java对象快速准确自动完成功能的IDE,包括隐式转换。
使用Speedbar进行代码浏览支持,使用优秀的Yasnippet进行代码模板,使用自动填充进行代码完成菜单。这些都是非常现代,积极维护的Emacs包。对于Maven和SBT,还有开箱即用的增量构建支持。
还有更多内容,例如交互式调试,重构和Scala解释器,这是一个劣质的过程。在Scala的现代IDE中你想要的所有东西都已经存在于Ensime中。强烈推荐给Emacsens。
答案 4 :(得分:4)
出于完整性的原因,我不得不说还有Pants - 在Twitter中使用的构建工具(早期的scala采用者之一)
它的主要区别在于它不仅适用于scala(顺便写入python),而是以google build system为模型。
它并不像sbt那么臃肿,所以对于新手来说它更简单,但我从来没有听说过Twitter和foursquare以外的Pants用法。
如果你害怕SBT,也许另一个不那么流行的构建工具ABT可能是你的替代吗?
答案 5 :(得分:3)
我走了同一条路,这就是我所在的地方: - 经过一些初步调查,我放弃了凯特。我喜欢在大多数事情上使用它,但是当涉及定义标签完成之类的东西时,我发现它非常缺乏。我建议你研究gedit,这对于Scala开发来说更加强大 - 使用gedit作为我的编辑器,我使用SBT并发现它是一个很棒的构建工具。我可以将它置于'测试'模式,当任何代码更改时,它重新编译相关文件并运行我的测试套件。这是一种非常有效的工作方式。
我还没看过Buildr。我想说我会,但老实说,SBT可供我使用,我真的没有必要去看另一个构建工具。
答案 6 :(得分:2)
如果你想使用Eclipse,但是使用sbt构建项目,并且仍然可以调试,请看这里的帖子:
zikaprog.wordpress.com/2010/04/19/scala-eclipse-sbt-and-debugging /
它也可以应用于除了sbt之外的构建者。
答案 7 :(得分:1)
最新版本的Maven Scala插件支持Zinc / Nailgun,可缩短启动时间并提高构建速度。请参阅Zinc and Incremental Compilation。