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的构件文件的父目录作为基准目录。
<project name="MyDemo" default="build" basedir=".">
</project>2.target元素
target为Ant的基本执行单元,它可以包含一个或多个具体的任务。多个target可以存在相互依赖关系。它有如下属性:
-
name属性指定
target元素的名称,这个属性在一个project中必须是唯一的。 -
depends属性用于描述
target之间的依赖关系,若与多个target存在依赖关系时,需要以,间隔。Ant会依照depends属性中target出现的顺序依次执行每个target。被依赖的target会先执行。 -
if属性&unless属性if用于验证指定的属性是否存在,若不存在,所在target将不会被执行。unless正好相反 -
description属性target功能的简短描述和说明。
<target name="clean" if="${build.dir}" description="delete the temp directory">
<delete dir="${build.dir}" />
</target>
<target name="prepare" depends="clean">
<mkdir dir="${build.dir}" />
</target>3.property元素
property元素可看作变量或者参数的定义,project的属性可以通过property元素来设定,也可在Ant之外设定。若要在外部引入某文件,例如build.properties文件,可以通过如下内容将其引入:
<property file="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
<property name ="name" value ="cyj"/>4.taskdef
Ant中的任务可以为3类:
-
核心任务:核心任务是Ant自带的任务,如
delete,mkdir,javac -
扩展任务:可选任务实来自第三方的任务,因此需要一个附加的JAR文件,如JUnit、JUnitReport
-
用户自定义的任务:用户自定义的任务是用户自己开发的任务。我们所需做的就是扩展
org.apache.tools.ant.Task类,并重写execute()方法。如Emma、CheckStyle
对于自定义任务,如FindBugs,定义如下:
<taskdef name="findbugs" classname="edu.umd.cs.findbugs.anttask.FindBugsTask" classpathref="jar.classpath" />此外,还有另外一种形式,定义一个properties文件,在该文件中将任务的名称和类名相对应,在一个文件中可以定义多个任务,如Emma:
<taskdef resource="emma_ant.properties" classpathref="jar.classpath" />其实emma也是遵循上述的任务定义格式的,只不过它把name和classname定义到了文件emma_ant.properties里面了。
更多的Ant任务,请参见官方文档
如何运行ANT脚本?
运行指定build.xml中的xxx任务,并附带参数key,示例:
ant -buildfile=C:\build.xml xxx -Dkey=value