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的原因。
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示例,但有个完整的指南正在编写中。