代码之家  ›  专栏  ›  技术社区  ›  gatoatigrado

什么是最好的scala构建系统?[关闭]

  •  51
  • gatoatigrado  · 技术社区  · 15 年前

    我看到过有关IDE的问题-- Which is the best IDE for Scala development? What is the current state of tooling for Scala? 但是我和IDES有过很多经验。现在,我将EclipseIDE与自动工作区刷新选项一起使用,而kde 4的kate作为我的文本编辑器。以下是我想解决的一些问题:

    1. 使用我自己的编辑器 IDES确实适合使用其组件的每个人。我更喜欢凯特,但刷新系统非常烦人(它不使用inotify,而是使用10秒的轮询间隔)。我不使用内置文本编辑器的原因是,自动完成功能被破坏,导致IDE挂起大约10秒。
    2. 仅重新生成已修改的文件 Eclipse构建系统已损坏。它不知道何时重建类。我发现自己几乎 一半 去项目的时间-清理。更糟糕的是,即使在它完成了我的项目的构建之后,几分钟后它也会出现一些奇怪的错误。( 编辑 -这些错误似乎是以前通过项目清理解决的问题,但后来又出现了…)。最后,将“preferences/continue launch if project contains errors”设置为“prompt”似乎对scala项目没有影响(即,即使存在错误,它也总是启动)。
    3. 生成自定义项 我可以使用“夜间”版本,但我想修改和使用我自己的scala版本,而不是内置在IDE插件中的编译器。也可以通过[例如] -Xprint:jvm 到编译器(打印出降低的代码)。
    4. 快速编译 虽然Eclipse并不总是构建正确的,但它看起来确实很快——甚至比 fsc .

    我看了蚂蚁和马文,虽然他们还没有被雇佣(我还需要花时间解决3和4)。在我花时间让一个次优的构建系统工作之前,我想看看是否有人有其他的建议。事先谢谢!

    更新 -我现在使用Maven,将一个项目作为编译器插件传递给它。它看起来足够快;我不确定Maven做了什么样的JAR缓存。当前的scala 2.8.0存储库可用[ link ]原型很酷,跨平台支持也不错。但是,关于编译问题,我不确定FSC是否真的被修复了,或者我的项目是否足够稳定(例如类名没有改变),手动运行它不会给我带来太多麻烦。如果您想看一个示例,请随意浏览我使用的pom.xml文件。[ github ]

    更新2 -从我所看到的基准来看,DanielSpiewak说的对,builder比maven快(而且,如果有人在做增量更改,maven的10秒延迟会让人恼火),所以如果有人能创建一个兼容的构建文件,那么它可能值得……

    8 回复  |  直到 7 年前
        1
  •  34
  •   Arne    7 年前

    第2点和第4点是 极其 很难用当前的scalac进行管理。问题是scala的编译器对于构建文件有点笨。基本上,无论您是否真的需要构建该文件,它都将构建您提供的任何内容。scala 2.8.0在这方面会有很大的改进,但是直到那时…EclipseSDT实际上有一些非常复杂(也非常黑客)的代码用于进行变更检测和依赖性跟踪。总的来说,这是一个不错的工作,但正如你所看到的,有皱纹。EclipseSDT 2.8.0将依赖于上述对scalac本身的改进。

    因此,只构建修改过的文件几乎是不可能的。除了SDT之外,我所知道的唯一一个工具就是SBT。( Simple Build Tool )。它使用编译器插件在编译文件时跟踪文件,并查询由编译器本身计算的依赖关系图。在实践中,与重新编译World方法相比,这将产生大约50%的改进。再一次,这是一个破解2.8.0之前的scalac中的缺陷的方法。

    好消息是,即使不担心变化检测,合理快速的编译仍然可以实现。FSC使用EclipseSDT用于实现快速增量编译的相同技术(ooh,听起来像“charlie eppes”)。简而言之,这是相当快的。

    我个人用 Apache Buildr .它的配置比Maven或SBT都要干净得多,而且它的启动时间要小很多(在MRI下运行时)。它与FSC集成,并尝试自己进行一些基本的变更检测(相当原始)。它还对主要Scala测试框架(ScalaTest、ScalaCheck和SCOS)具有自动的魔法支持,以及支持与Java源和IDE元生成的联合编译,以用于ITELLIJ和Eclipse。哦,它支持Maven的所有特性(依赖解析等),还有一些。我甚至正在开发一个扩展,它允许与JavaRebel集成的交互式shell支持,并支持几个shell提供者(scala、jirb、clojure repl等)。它还没有为SVN准备好,但是一旦它准备好了,我将提交(可能在1.3.5的时候)。

    如您所见,我非常坚定地认为builder是目前最好的scala构建工具。它的文档在scala中有点零乱,但这是因为所有的东西都是如此简单,以至于很难在文档中不感到冗长。您可以随时查看 my GitHub repositories 举个例子。祝你好运!

        2
  •  6
  •   Brian Agnew    15 年前

    你看过Intellij的想法吗? Scala integration ?intellij有一个忠诚的(狂热的?)在Java开发人员中,您可能会发现这适合于您的需求。

        3
  •  4
  •   dberesford    15 年前

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

    • 自动完成只在某些时候起作用
    • 调试程序无法正常工作(尤其是在尝试调试scala xml时)
    • 调试器忘记断点
    • “去定义”并不经常起作用。

    我很高兴听到builder听起来是个更好的选择(无论如何,在build方面),我会试试的-谢谢!

        4
  •  4
  •   om-nom-nom    12 年前

    出于完整性的原因,我不得不说 Pants --Twitter中使用的构建工具(早期scala采用者之一)

    它的主要区别在于,它不仅适用于scala(顺便说一下,它是用python编写的),而且是在 google build system .

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

    如果你害怕SBT,也许是另一个不那么流行的构建工具, ABT 可以是一个 可供替代的 为你?

        5
  •  3
  •   Steve Thompson    15 年前

    我沿着同一条路走,我在这里: -经过初步调查后,我把凯特送走了。我喜欢把它用在大多数事情上,但是当涉及到定义制表符完成的事情时,我发现它非常缺乏。我建议您改为研究gedit,它对于scala开发更为健壮。 -以gedit作为我的编辑器,我使用sbt并发现它是一个很好的构建工具。我可以将它置于“测试”模式,当任何代码更改时,它会重新编译相关文件并运行我的测试套件。这是一种非常有效的工作方式。

    我还没看建筑商。我想说我会的,但老实说,有了SBT,我真的不需要考虑另一个构建工具。

        6
  •  3
  •   Y.H Wong    14 年前

    如果你用emacs,我想 Ensime 是一个很好的IDE。我认为,在编写时,AcXME是唯一的IDE,它将给斯卡拉和Java对象的快速准确的自动完成,包括隐式转换。

    有使用速度栏的代码浏览支持,使用优秀的Yasnipet的代码模板,以及使用自动完成的代码完成菜单。这些都是非常现代,积极维护的emacs包。还有现成的对Maven和SBT的增量构建支持。

    其中还有很多东西,比如交互式调试、重构和低级过程中的scala解释器。你想在一个现代的侧面为斯卡拉所有的东西已经在恩西姆。强烈推荐用于Emacsens。

        7
  •  2
  •   Roland    14 年前

    如果您想使用Eclipse,但是使用sbt构建项目,并且仍然能够进行调试,请看下面的文章:

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

    它也可以应用于建筑商以外的SBT。

        8
  •  1
  •   sourcedelica    11 年前

    MavenScala插件的最新版本支持锌/钉枪,以加快启动时间和更快的增量构建。参见 Zinc and Incremental Compilation .