ANT脚本示例教程
什么是ANT?
Ant是一种基于Java的build工具。它有以下的优点。
-
跨平台性。Ant是纯Java语言编写的,因此具有很好的跨平台性。
-
操作简单。Ant是由一个内置任务和可选任务组成的。Ant运行时需要一个XML文件(构建文件)。
-
Ant通过调用target树,就可以执行各种task。每个task实现了特定接口对象。由于Ant构建文件时XML格式的文件,所以很容易维护和书写,而且结构很清晰。
-
Ant可以集成到开发环境中。由于Ant的跨平台性和操作简单的特点,它很容易集成到一些开发环境中去。
安装&配置ANT
-
点击选择下载,解压至任意目录,如
D:\apache-ant-1.9.4
-
设置环境变量Path,追加
;D:\apache-ant-1.9.4
-
运行
ant -version
,若出现当前版本号,则表示按照成功
开始ANT之旅
Ant的构件文件是基于XML编写的,默认名称为build.xml
。由一系列关键元素组合而成,现一一介绍。
1.project
元素
project
元素是Ant构件文件的根元素,Ant构件文件至少应该包含一个project
元素,否则会发生错误。在每个project
元素下,可包含多个target
元素。接下来向读者展示一下project
元素的各属性。
name
属性
用于指定project元素的名称。
default
属性
用于指定project默认执行时所执行的target的名称。
basedir
属性
用于指定基路径的位置。该属性没有指定时,使用Ant的构件文件的父目录作为基准目录。
2.target
元素
target
为Ant的基本执行单元,它可以包含一个或多个具体的任务。多个target
可以存在相互依赖关系。它有如下属性:
-
name
属性指定
target
元素的名称,这个属性在一个project
中必须是唯一的。 -
depends
属性用于描述
target
之间的依赖关系,若与多个target
存在依赖关系时,需要以,
间隔。Ant会依照depends
属性中target
出现的顺序依次执行每个target
。被依赖的target
会先执行。 -
if
属性&unless
属性if
用于验证指定的属性是否存在,若不存在,所在target
将不会被执行。unless
正好相反 -
description
属性target
功能的简短描述和说明。
3.property
元素
property
元素可看作变量或者参数的定义,project
的属性可以通过property
元素来设定,也可在Ant之外设定。若要在外部引入某文件,例如build.properties文件,可以通过如下内容将其引入:
property
元素可用作task
的属性值。在task
中是通过将属性名放在${
和}
之间,并放在task
属性值的位置来实现的。
Ant提供了一些内置的属性,它能得到的系统属性的列表与Java文档中System.getPropertis()
方法得到的属性一致。同时,Ant还提供了一些它自己的内置属性,如下:
-
basedir
:project
基目录的绝对路径 -
ant.file
:buildfile的绝对路径,如C:\build.xml -
ant.version
:Ant的版本信息,本文为1.9.4 -
ant.project.name
:当前指定的project
的名字,即前文说到的project
的name属性值 -
ant.java.version
:Ant检测到的JDK版本,本文为1.6
4.taskdef
Ant中的任务可以为3类:
-
核心任务:核心任务是Ant自带的任务,如
delete
,mkdir
,javac
-
扩展任务:可选任务实来自第三方的任务,因此需要一个附加的JAR文件,如JUnit、JUnitReport
-
用户自定义的任务:用户自定义的任务是用户自己开发的任务。我们所需做的就是扩展
org.apache.tools.ant.Task
类,并重写execute()
方法。如Emma、CheckStyle
对于自定义任务,如FindBugs,定义如下:
此外,还有另外一种形式,定义一个properties文件,在该文件中将任务的名称和类名相对应,在一个文件中可以定义多个任务,如Emma:
其实emma也是遵循上述的任务定义格式的,只不过它把name和classname定义到了文件emma_ant.properties里面了。
更多的Ant任务,请参见官方文档
如何运行ANT脚本?
运行指定build.xml中的xxx任务,并附带参数key,示例:
ant -buildfile=C:\build.xml xxx -Dkey=value