1.Ant的安装
- 在Apache官网下载最新Ant
- 环境变量设置:
系统变量:ANT_HOME=d:\ant_home\apache-ant-1.70在
用户变量:中加入Ant 的bin 目录:path=%ANT_HOME%\bin - 测试ant是否安装成功:进入cmd运行Ant.出现如下提示,说明安装成功.
E:\srcgen\webwork>ant
Buildfile: build.xml does not exist!
Build failed
2.Ant入门
Ant的构建文件类型是xml,默认读取的是build.xml文件,如果需要指定文件,可以用如下命令ant –f hello.xml或者ant –file hello.xml或者ant –buildfile hello.xml。下面来一段简单的构建文档。
<?xml version="1.0" encoding="UTF-8" ?>
<project name="HelloWorld" default="run" basedir=".">
<property name="src" value="src"/>
<target name="init">
<echo message="Hello,init"/>
</target>
<target name="run" depends="init">
<echo message="Hello,run"/>
</target>
<target name="testif" if="src">
<echo message="Hello,if"/>
</target>
<target name="testunless" unless="src">
<echo message="Hello,unless"/>
</target>
</project>
打开cmd,进入文件所在目录,输入ant run,回车。输出如下图:
这里run代表了一个任务,而这个任务又依赖了另外一个任务,所以会先执行init任务。如果不知道target里面定义了哪些可以执行的命令,输入ant -projecthelp会提示出这些命令。
Ant的关键元素project、target、property。
1.project元素
project元素是Ant构件文件的根元素,Ant构件文件至少应该包含一个project元素,否则会发生错误。在每个project元素下,可包含多个target元素。接下来向读者展示一下project元素的各属性。
- name属性:用于指定project元素的名称。
- default属性:用于指定project默认执行时所执行的target的名称。例如,本例输入ant也会输出相应结果。
- basedir属性:用于指定基路径的位置。该属性没有指定时,使用Ant的构件文件的所在目录作为基准目录,即’.’。
2.target元素
它为Ant的基本执行单元,它可以包含一个或多个具体的任务。多个target可以存在相互依赖关系。
- name属性:指定target元素的名称,这个属性在一个project元素中是唯一的。我们可以通过指定target元素的名称来指定某个target。
- depends属性:用于描述target之间的依赖关系,若与多个target存在依赖关系时,需要以“,”间隔。Ant会依照depends属性中target出现的顺序依次执行每个target。被依赖的target会先执行。
- if属性:用于验证指定的属性是否存在,若不存在,所在target将不会被执行。
- unless属性:与if属性相反。
- description属性:该属性是关于target功能的简短描述和说明。
3.property元素
该元素就是参数的定义,也可以引用文件,引用方法与properties文件完全一样。
all.properties的内容:
src1=D:\\study\\ant\\src1
src2=D:\\study\\ant\\src2
src3=D:\\study\\ant\\src3
build.xml中的引用:
<property file="all.properties" />
<target name="run">
<ant dir="${src1}" target="run" />
<ant dir="${src2}" target="run" />
<ant dir="${src3}" target="run" />
</target>
Ant还提供了一些它自己的内置属性:
basedir:project基目录的绝对路径;
ant.file:buildfile的绝对路径,即”${basedir}/build.xml”;
ant.version:Ant的版本,在本文中,值为1.9.1;
ant.project.name:当前指定的project的名字,即project的name属性的值;
ant.java.version:Ant检测到的JDK的版本,在上例运行结果中可看到为1.7。
3.Ant中常用task
- 输出信息
<echo message=”xxx” />或者<echo>yyyy</echo>
- 引入一个xml 文件
<import file="../build2.xml"/>
- 拷贝
<!-- 拷贝文件 -->
<copy file="myfile.txt" tofile="mycopy.txt"/>
<!-- 拷贝一个文件到指定目录 -->
<copy file="myfile.txt" todir="../some/other/dir"/>
<!-- 拷贝一个目录集合到指定目录 -->
<copy todir="../dest/dir">
<fileset dir="src_dir"
excludes="**/*.java"
includes="**/Test.java"/>
</copy>
<!-- 拷贝一个目录集合到指定目录并且将文件重命名为.bak -->
<copy todir="../backup/dir">
<fileset dir="src_dir"/>
<globmapper from="*" to="*.bak"/>
</copy>
<!-- 拷贝并替换@TITLE@为Foo Bar -->
<copy todir="../backup/dir">
<fileset dir="src_dir"/>
<filterset>
<filter token="TITLE" value="Foo Bar"/>
</filterset>
</copy>
copydir和copyfile与copy具有同样的功能,老版本中的任务,不推荐使用。
<copyfile src="test.java" dest="subdir/test.java"/>
<copydir src="../resources" dest="${dist}" includes="**/*.java"/>
- 删除
<!-- 删除文件 -->
<delete file="/lib/ant.jar"/>
<!-- 删除目录 -->
<delete dir="lib"/>
<!-- 删除指定文件 -->
<delete>
<fileset dir="." includes="**/*.bak"/>
</delete>
<!-- 删除svn文件,svn文件默认是excludes的 -->
<delete defaultexcludes="false">
<fileset dir="src" includes="**/.svn"/>
</delete>
- 剪切
<move todir="some/new/dir">
<fileset dir="my/src/dir">
<include name="**/*.jar"/>
<exclude name="**/ant.jar"/>
</fileset>
</move>
- 重命名
<rename src="foo.jar" dest="ant-${version}.jar"/>
- 替换
<!-- 替换的三种方式:
1.直接在属性里面定义好value;
2.在replaceFile中定义value;
3.利用properties文件中的键值对来定义参数 -->
<replace file="configure.sh"
value="defaultvalue" propertyFile="source/name.properties">
<replacefilter token="token1"/>
<replacefilter token="token2" value="value2"/>
<replacefilter token="token3" property="property.key"/>
</replace>