Apache Ant 是一款基于 Java 的构建工具。从理论上讲,它类似于 make,但没有 make 的缺点。
为什么在已经存在 make、gnumake、nmake、jam 等工具的情况下,还需要另一个构建工具?因为所有这些工具都存在 Ant 的最初作者在跨多个平台开发软件时无法忍受的局限性。类似 make 的工具本质上是基于 shell 的:它们评估一组依赖项,然后执行类似于你在 shell 上发出的命令。这意味着你可以通过使用或编写任何适用于你正在使用的操作系统的程序来轻松扩展这些工具;然而,这也意味着你将自己限制在操作系统或至少是操作系统类型(例如 Unix)上。
Makefile 本质上也是邪恶的。任何使用过它们的人都会遇到令人恐惧的制表符问题。“我的命令没有执行是因为我在制表符前面有一个空格吗?!!” Ant 的最初作者说过太多次了。像 Jam 这样的工具在很大程度上解决了这个问题,但仍然需要使用和记住另一种格式。
Ant 不同。它不是通过基于 shell 的命令进行扩展,而是通过 Java 类进行扩展。它不是编写 shell 命令,而是使用基于 XML 的配置文件,调用一个目标树,其中执行各种任务。每个任务都由实现特定 Task 接口的对象运行。
当然,这会消除构建 shell 命令(例如 `find . -name foo -exec rm {}`
)所固有的某些表达能力,但它使你能够跨平台工作——在任何地方都能工作。而且,如果你真的需要执行 shell 命令,Ant 有一个 <exec>
任务,它允许根据执行操作系统的不同来执行不同的命令。