Java 构建系统 Maven 1.0 于三年前发布,并且已经在开源世界和行业内得到广泛采用;其后,2.0 新的发布却并没有得到同等的赞誉。与此同时,Ruby 变得越来越流行,而且通过像 Rake 这样的工具证明,内部 DSL 的概念是非常有效的。
另一方面,用通用语言编写的 DSL 即可运行。通过计算机所能达到的计算限度的扩展能力,你还能获得高级语言的简便性。
随着时间的过去,完全新的构建系统已由 Ruby 写成,比如 Bake 和 Rant 。还有些构件系统扩展了 Rake,比如 Raven ,像 Maven 一样它也支持外部存储。在这些系统中有个新的加入者, Buildr ,尤其致力于简化 Java 构建。作者 Assaf Arkin 提倡建立能精简 XML 化和过度工程化的解决方案,你可以在他的blog 或者他收集的 tumblr 引证中找到相关证据。这就是为什么他试图从他的项目中,比如 Apache Ode ,去掉 Maven2 的原因。
我们很快给它起了个绰号叫“Maven 不可靠原则”,虽然公平一点说,我们知道它并没有什么不可靠,或者只是怀疑这个构建是否会运行:它不会。但最终,也许有一天我们获得了足够多的理由。测试案例停止运行。(……)总之,我们不得不做出选择。是敏捷还是 Maven,必须使用它们其中的一个。
Assaf 曾想到回到 Ant:
于是我们开始想像没有 Maven 的幸福生活。也许我们应该转回到 Ant?即使它有那么多缺点,但至少 Ant 构建可以运行。当然,Ant 是不可声明的,而这是所有软件开发者的圣杯所在。但错误地使用声明性比任何套管程序(注:结构非常复杂的程序)还要糟糕。
……最终还是选择了 Rake。
因此我们做到了,开始使用 Rake。让我给你说说我的遭遇。Rake 被证明是个非常棒的选择,它是个好的开始,但这并不是我们原本所期望的。我们运行的典型 Java 应用由一些模块组成,所有模块都有相同的普通生命周期任务:编译、测试、打包、部署。为每一个模块一遍又一遍地编写那些代码使得这并不比 Ant 好多少。我们有了一个更好的办法。
传奇(Saga)导致了 Buildr 的诞生,它具有容易实现的目标(也就是处理 XMLBeans),并允许你依据普通的 Ruby 代码来完成基本的任务。性能可能是阻止 Buildr 得到更广泛采用的最后障碍,但“快速而猛烈的”Buildr证明自己是能够和Maven 竞争的 。 > 我们正在构建相同的代码,运行相同的测试,编译相同的XMLBeans,创建相同的Hibernate schemas,共享相同的远程和本地数据存储。所有的这些是想说明,它们是功能相当的黑盒。给它们相同的项目,他们就能产生相同的JAR、WAR 和分发文件等。
它能构建相同的项目,但脚本从52 个泛滥的XML 文件缩减到只剩一个脚本,缩减率达91%。但这还不是全部,Buildr 设法把构建时间减少了50%!即使是部分构建,Buildr 执行也类似或好过Maven。 > 当然,我们不是在估测原生的Ruby 和纯Java。我们在比较一种实现和另外一种实现,它们完成的是相同的任务,黑盒是相当的。这是一个真实的基准对比。
Assaf 以一个非常好的总结结束了采访:
Ruby 可能会比较慢,但你通过它构建的应用可能非常非常快。
我们可以想像,看到 Maven 和 Buildr 短兵相接是多么有趣的事情。 这篇文档目前仅限于 RDoc 和一个 Apache Rakefile 示例,但有个完整的指南正在编写中。
查看英文原文: When Ruby Builds Faster Than Java: Buildr - - - - - -
译者简介:张凯峰,在 Java 和 Web 开发方面略有心得,现在 IBM 中国软件开发中心(CSDL) 从事 Lotus Forms 的 SVT、Automation 相关工作,曾参与译著《 Ajax 实战》。与 InfoQ 中文站分享内容,请邮件至 china-editorial@infoq.com 。
评论