1.下载
到 http://ant.apache.org/bindownload.cgi站点下载Ant最新版
2.解压
将下载的文件解压到任意目录,解压缩后看到如下文件结构:
bin:启动和运行Ant的可执行命令
docs:Ant工具的相关文档,这些文档对于学习Ant有很大的作用
etc:包含一些样式单文件,通常无需理会该目录下的文件
lib:包含Ant的核心类库,以及编译和运行Ant所以来的第三方类库
LICENSE等说明性文档
3.配置环境变量
在使用Ant之前,请确保已经正确的安装了JDK, 并且正确的配置了%JAVA_HOME% , 另外,还需要配置%ANT_HOME%,这个变量指向刚刚解压的文件夹目录,配置的过程和%JAVA_HOME%相同。
Ant工具的关键命令就是%ANT_HOME%/bin下的ant.bat(linux版为ant.sh)命令,如果希望操作系统可以识别该命令,可以将%ANT_HOME%/bin路径添加到操作系统的PATH环境变量之中。
配置好以后,可以直接在命令行里面输入ant,如果看到如下内容,则说明Ant安装成功:
4. Ant常用参数
ant -find/-s 在上级目录中搜索生成文件,直到达到文件系统的根路径
ant -file/-f 使用指定的文件名作为项目的生成文件
ant -logfile/-l 使用指定的文件名作为ant的日志输入文件
ant -keep-going/-k 执行所有不依赖于出错的target的target
ant -help 打开ant工具的帮助菜单
....
更多命令详情,请在命令行输入ant -help查看.
可以在使用Ant命令的时候传入参数:例如:
ant -Denv=%ANT_HOME%,这里传入了一个叫做env的参数,之后可以在生成文件中通过$env得到这个值,这是windows中的写法,
在linux系统中,则使用ant -Devn=$ANT_HOME。
在默认情况下,Ant将运行生成文件里面指定的默认target,如果希望运行Ant时指定需要执行的target,可以使用如下命令格式:
ant [target [target2 [target3] ...]]
5. 关于生成文件build.xml
使用Ant的关键就是编写生成文件,生成文件定义了该项目的各个生成任务(target),并定义生成任务之间的关系。Ant默认的生成文件名为build.xml,也可以使用其他的名字。生成文件可以放在任意的文件夹中,但通常的做法是放在项目的顶层目录中。
build.xml文件的根元素是<project.../>,一个<project>元素中可以定义多个<target>,每个<target>又可能由一个或多个任务序列组成,当执行某个<target>时,实际上就是一次执行该目标所包含的全部任务,每个任务由一段可执行的代码组成。
<project>元素中常见的属性:
default:指定默认的target,这个属性是必须的,如果运行ant命令时没有显式指定执行的target,将执行这个默认的target
basedir:指定项目的基准路径,生成文件中的其他相对路径都是基于该路径的、
name:指定项目名,该属性仅仅指定一个名字,对编译和项目的生成没有太大的实际作用
description:指定项目的描述性喜,同样对编译和项目的生成没有太大的实际作用
<target>元素中常见的属性:
name:指定该target的名称,该属性是必须的,而且非常重要,这个名称可以被其他的target引用,而且,在一个build.xml文件中,target的名称应该唯一
depends:该小户型可以指定一个或多个target名,表示当前target依赖于这些target,执行该target之前应该先执行该depends属性所指定的每一个target。例如:
1
|
< target name = "step3" depends = "step1, step2" />
|
if:该属性指定一个属性名,用属性表示仅当设置了该属性时才执行此target。例如:
1
|
< target name = "aaa" if = "prop1" />
|
unless:和if相反,该属性指定一个属性名,表示仅当没有设置改属性时才执行此target。例如:
1
|
< target name = "bbb" unless = "prop2" />
|
6. Ant任务分为三类:
核心任务:指Ant自带的任务
可选任务:指来自第三方的任务,因此需要一个附件的Jar文件
用户自定义的任务:指用户自己开发的任务
7. <project>的子元素之<property>:用于定义一个或多个属性
Ant生成文件中的属性类似于编程语言中的宏变量,他们都具有属性名和属性值。和编程语言不同的是,生成文件中的值不可改变。定义一个属性的最简单的形式如下:
1
|
< property name = "buildDirectory" value = "/home/user/Desktop" />
|
如果需要获取该属性值,使用${buildDirectory}访问该变量即可。
注意:美元符号"$"在Ant生成文件中具有特殊意义,如果希望将它当成普通的字符,应该使用"$",例如:
1
|
< echo >$${buildDirectory}=${buildDirectory}</ echo >
|
上面的代码中执行后会输出:[echo] ${buildDirectory}=/home/user/Desktop
<property>可以接受如下几个常用的属性:
name:指定需要设置的属性名
value:指定属性值
resource:指定属性文件的资源名称,Ant将负责从属性文件中读取属性名和属性值
file:指定属性文件的文件名,Ant将负责从属性文件中读取属性名和属性值
url:指定属性文件的URL地址,同样,Ant将负责从属性文件中读取属性名和属性值
environment:用于指定系统环境变量的前缀。通过这种方式允许Ant访问系统的环境变量
classpath:指定搜索属性文件的文件和路径集
classpathref:指定搜索属性文件的文件和路径集引用,该属性并不是直接给出系列文件或路径,而是给定文件和路径集引用
下面给出几个使用<property>元素的例子:
<property file="foo.poperties" /> <!-- 读取foo.properties文件中的属性名和值 -->
<property url="http://localhost:8080/Web/jdbc.properties" />
<property>元素所读取的属性文件中,内容由一系列的name=value组成。
<property environment="env" /> <!-- 定义访问操作系统环境变量的前缀是env -->
定义了上面的property以后,可以通过以下方式来访问操作系统的环境变量:
<echo>${env.JAVA_HOME}</echo>
8. <project>的子元素之<path>和<classpath>:用于定义一个或多个文件和路径
通常,我们需要使用Ant编译、运行Java文件,这时常常引用到第三方的Jar包,这就需要用到<classpath>元素了。<path>和<classpath>元素都用于定义文件和路径集,区别是,classpath元素通常作为其他任务的子元素,既可以引用已有的文件和目录集,也可以临时定义一个文件和目录集;而<path>元素则作为<project>元素的子元素,用于定义一个独立的、有名称的文件和目录集,用于被引用。
<path>和<classpath>都用于手机系列的文件和目录集,都可接受如下的子元素:
<pathelement>:用于指定一个或多个目录,可以指定如下两个属性中的一个:
path:指定一个或多个目录(或者Jar文件),多个目录或Jar文件直接以英文冒号或英文分号隔开
location:指定一个目录和Jar文件(因为Jar文件哈可以包含更多层次的文件结构,所以Jar文件实际上可以看成是一个文件路径)
<dirset>:采用模式字符串的方式指定多个目录
<fileset>:采用模式字符串的方式指定多个文件
<filelist>:采用直接给出系列文件名的方式指定系列文件
8.1 <pathelement>元素
如下是一个配置片段:
1
2
|
< pathelement path = "/path/to/file2.jar:/path/to/class2;/path/to/class3" /> <!--注意第一个是文件,后两个是目录 --> < pathelement location = "lib/somejarfile.jar" />
|
8.2 <dirset>元素
如果要指定多个目录,则应该使用<dirset>元素,该元素需要一个dir属性,dir属性指定该目录集的根路径。除此之外,dirset还可以使用<include>和<exclude>两个子元素来指定包含和不包含哪些目录,如下面的配置片段:
1
2
3
4
|
< dirset dir = "build" >
< include name = "apps/**/classes" /> <!-- 包含build/apps下的所有目录下的classes下的所有文件 --> < exclude name = "apps/**/test" /> <!-- 不包含build/apps下的子目录中带有test下的所有文件 --> </ dirset >
|
8.3 <filellist>元素
<filelist>元素需要指定如下两个属性:
dir:指定文件集里多个文件所在的基准路径,这是一个必需的属性
files:多个文件名列表,多个文件名之间用英文逗号或者空格隔开
如下是一个配置片段:
1
|
< filelist id = "srcFiles" dir = "src" files = "foo.xml, bar.xml" />
|
注意:几乎所有的Ant元素都可以指定两个属性:id和refid,其中id用于为元素指定一个唯一的标识符,而refid用于指定引用另一个元素,例如下面的filelist配置:<filelist refid="srcFiles" />,该filelist元素所包含的文件集和前面的srcFiles包含的文件完全一样。
实际上,<filelist>还允许使用多个<file>子元素来指定文件列表,如下是一个配置片段:
1
2
3
4
|
< filelist id = "srcFiles" dir = "${src.file}" >
< file name = "foo.xml" />
< file name = "bar.xml" />
</ filelist >
|
8.4 <fileset>元素
<fileset>元素可以指定两个属性:
dir:指定文件集里多个文件所在的基准路径,这是一个必需的属性
casesensitive:指定是否徐芬大小写,默认区分大小写
除此之外,<fileset>元素中还可以使用<include>和<exclude>子元素来指定包含和不包含哪些文件,如下是一个配置片段:
1
2
3
4
|
< fileset dir = "src" casesensitive = "yes" > <!-- 指定src路径下的文件集 --> < include name = "**/*.java" /> <!-- 包含所有的java文件 --> < exclude name = "**/*test*" /> <!-- 排除所有文件名中有test字符串的文件 --> </ fileset >
|
掌握了<pathelement>, <dirset>, <filelist>, <fileset>四个元素的用法之后,我们就可以将他们组合在一起使用了,这样才能更灵活的适用于不同的选择需求。
9. Ant的任务(task)
每一个<target>由一个或多个task组成,task是<target>元素的核心。下面介绍一些常用的核心task:
javac:用于编译一个或多个Java源文件,通常需要srcdir和destdir两个属性,用于指定Java源文件的位置和编译后class文件保存的位置
java:用于运行某个Java类,通常需要classname属性,用于指定需要运行哪个类
jar:用于生成jar包,通常需要destfile属性,用于指定所创建jar包的文件名;除此之外,还需要指定一个文件集,用于指定需要将哪些文件打包到jar文件中
sql:用于执行一条或多条SQL语句,通常需要driver, url, userid和password等属性,还可以通过src属性来指定需要执行的SQLl脚本文件,或者直接使用文本内容的方式指定SQL脚本字符串
echo:用于输出某个字符串
exec:执行操作系统的特定命令,通常需要executable属性,用于指定想执行的命令
copy:用于复制文件或路径
delete:用于删除文件或路径
mkdir:用于创建文件夹
move:用于移动文件或目录
另外, %ANT_HOME%/docs/manual/CoreTasks路径下包含了Ant所有核心task的详细介绍,%ANT_HOME%/docs/manual/OptionalTask路径下包含了Ant所有可选task的详细介绍,同学们可以参考这些文档来了解各个task所支持的属性和选项以及它们的用法。