JRake
2006年12月18日
现在,JRuby 越来越成熟,许多人正在考虑最终做些什么来改进构建脚本的世界,用 rake 替换 ant。
我的前同事 Matt Foemmel 已经开始着手进行这项工作,并在他的 FoemBlog 上记录了进展。Matt 写过比大多数人更多的构建脚本,大约在 2000 年,我们都犯了错误,认为基于 XML 的构建文件是可行的。我们现在也都认为你需要一个完整的脚本语言。
构建脚本的问题在于,你需要声明性和过程性的特性。构建文件的核心是定义任务及其之间的依赖关系。这是声明性部分,也是 ant 和 make 等工具擅长的领域。问题是,随着构建变得越来越复杂,这些结构就不够用了。你开始需要条件逻辑;特别是,你需要能够定义自己的抽象。(参见 我的 rake 文章 以获取示例。)
Rake 的优势在于它同时提供了这两种特性。它提供了一个简单的声明性语法来定义任务和依赖关系,但由于此语法是内部 领域特定语言,因此你可以无缝地利用 Ruby 的全部功能。
对于 Java 构建来说,Rake 的一个大问题是很难避免大量的 Java VM 启动。JRake 运行在 JRuby 之上,而 JRuby 运行在 Java VM 内部,因此这个问题就消失了。
我经常听到的一个反对在构建中使用 rake 的论点是,它添加了另一种人们必须学习的语言。这个论点忽略了一点,即 ant 本身实际上就是一门语言。它符合 XML 标准并不改变你仍然需要了解所有不同的 ant 任务是如何工作以及如何组合在一起的事实。当然,如果你已经了解 ant,那么学习 rake 就会需要额外的努力;但如果你的头脑中没有这两种语言,我认为 rake + ruby 并不难,而且脚本语言可以为你做很多其他事情。(我相信每个程序员都应该熟悉至少一门脚本语言——它们可以做很多有用的事情。)
由于 ant 投入了大量资金,它还会存在一段时间,但我们认为 rake 是未来的更好解决方案。