Ant的使用
什么是Apache Ant
Apache Ant是一个基于java的软件构建工具(build tool),理论上它有点类似C/C++的make工具
为什么要用ant?
make, gnumake, nmake, jam或其他已有的构建工具里,为什么还需要单独搞这个ant工具呢?
因为前面的这些构建工具都有局限性,Ant的原创作者在开发跨多个平台的软件时无法忍受。
- make工具本质上是基于shell: make会评估一些系统依赖,然后才能执行命令。这意味着你可以轻松地使用或编写您正在处理的操作系统的任何程序来扩展这些构建工具。但是,这也意味着你将自己限制在操作系统上,或者至少是Unix类的操作系统类型。
- makefile工具本身也是很讨厌的,任何一个曾经用makefile工作的人都会遇到麻烦的tab问题。“由于我在tab前面加了一个空格导致我的命令行总不凑效”,Ant的原创作者说了太多遍了。像Jam这样的工具在很大程度上处理了这个问题,但是仍然要使用和记住它的一些格式。
而Ant是不同的,Ant使用Java类扩展,而不是使用基于shell命令扩展。与编写shell命令不同,配置文件是基于xml的,调用一个目标树来执行各种任务。每个任务由实现特定任务接口的Java对象运行。
Ant去掉了一些shell命令(比如find . -name foo -exec rm {}
)的功能,但它提供了类似的功能,一个跨平台(work anywhere and everywhere)的能力。如果你真的需要执行这些shell命令,Ant有一个<exec>
任务允许根据正在执行的操作系统执行不同的命令。
说白了,Ant工具为了解决跨平台问题。
使用Apache Ant
编写一个简单的构建文件
Apache Ant的构建文件是用build.xml编写的。
每个构建文件包含一个项目(project)和至少一个默认目标(target)。目标包含任务(task)。
Projects
一个project包含下面3个属性
属性 | 描述 |
---|---|
name | 项目名称 |
default | 在不提供目标时使用的默认目标 |
basedir | 完成所有路径计算的基本目录。 这个属性可能会被预先设置“basedir”属性覆盖。 如果该属性和属性值都没有设置,则将使用构建文件build.xml所在的目录路径。 |
可选地,项目的描述可以由顶级的<description>
元素提供。
每个项目定义一个或多个目标。目标是您想要执行的一组任务。当启动Ant时,可以选择要执行的目标。当没有目标时,项目的默认值default被使用。
Targets
一个目标可以依赖于另外目标,使用depends属性。
例如,您可能有一个用于编译的目标,和一个发布的目标。当你执行发布的目标时不得不先执行编译的目标,所以发布目标取决于编译目标。应该注意的是,Ant的depends属性, 如果它依赖的目标没有执行,而是直接执行当前目标,它也会自动去执行依赖的目标。
Tasks
任务是可以执行的一段代码。 一个任务可以有多个属性(或者参数,如果你喜欢的话)。
属性的值可能包含对属性的引用。这些引用将在任务执行之前解析。
任务有一个共同的结构: <name attribute1="value1" attribute2="value2" ... />
name就是任务的名称,attributeN是属性名,valueN是该属性的值。
所有任务共享一个任务名属性。该属性的值将用于Ant生成的日志消息。
Properties