当Ruby比Java构建还快:Buildr

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中文站分享内容,请邮件至 [email protected]

你可能感兴趣的:(当Ruby比Java构建还快:Buildr)