Apache Ant是一个基于java的构建,生成工具,Another Neat Tool,主要是通过使用build.xml文件,自动地将你的项目拷贝到某个目录,发布项目,或者生成一些代码,执行SQL语句。总之,它可以完成除了开发代码本身之外的大部分辅助性的工作。其实Ant和linux里面的make命令的功能类似。
既然已经有了make,nmake等等工具了,为什么还需要Ant呢? 因为Ant是用java写的,所以具有跨平台的能力。这一点在当今的软件行业可谓是重中之重,因为平台的多样性,跨平台变得必要。Ant的配置文件是xml格式的 (默认情况下这个文件叫做build.xml),这个也使得其跨平台。
既然已经有了make,nmake等等工具了,为什么还需要Ant呢? 因为Ant是用java写的,所以具有跨平台的能力。这一点在当今的软件行业可谓是重中之重,因为平台的多样性,跨平台变得必要。Ant的配置文件是xml格式的 (默认情况下这个文件叫做build.xml),这个也使得其跨平台。
安装方法
首先需要注意的一点是,JDK的环境变量必须是事先配置好了的。
然后直接去Apache的网站下载该项目的源代码包,解压到本地磁盘的某个目录,然后在环境变量中添加path的值就可以了,然后就可以在DOS中使用Ant的命令了。
将源代码和其它输入文件转换为可执行文件的形式,定义生成文件之间的依赖关系。
Ant默认读取的文件叫做build.xml,你要使用它的话,就必须构建一个build.xml,然后通过DOS到达那个路径之后,再使用ant命令。当然,也可以使用其它名字的xml文件,只是在使用的时候多指明一个参数就是了。
当你全部都安装好了,你可以运行ant -diagnostics,这样可以打印出Ant的内部状态看看。
当你全部都安装好了,你可以运行ant -diagnostics,这样可以打印出Ant的内部状态看看。
1.怎样构建一个简单的build.xml文件?
首先,Ant的buildfile就是一个xml文件,每个buildfile包含一个peoject和至少一个(default) target,targets里面包含task elements,每个element可以有一个id,通过这个id来进行索引,这个id必须是unique的。
1)这个文件是由<project></project>标签作为最外面的标签,每个build.xml文件有且只能有一个project标签。这个标签可以有3个属性,name,default和basedir,但是只有default是必须的,其它的都可选。比如<project name="gasoline" default="init">。所谓的default是一个target,如果执行ant的时候没有指定target的话,那么就执行这一个。
1)这个文件是由<project></project>标签作为最外面的标签,每个build.xml文件有且只能有一个project标签。这个标签可以有3个属性,name,default和basedir,但是只有default是必须的,其它的都可选。比如<project name="gasoline" default="init">。所谓的default是一个target,如果执行ant的时候没有指定target的话,那么就执行这一个。
2)然后,第二层的标签是<target></target>,每个target都是由一个或者多个tasks组成的,而task本身就是实际想要执行的操作。比如
<target name="init01">
<mkdir dir="test" />
</target>
每个target可以独立执行或者依赖于其他target执行完毕才能执行。在定义的时候,可以在name后面再加上depends="init00"之类的语句,意思就是说,当前的这个target是依赖于init00这个target的,要执行当前target之前,先执行init00这个target。
在执行Ant的时候,你可以选择运行哪一个target,如果没有选的话,那么就执行default
3)然后就是具体的task了。
task没有什么标签之类的,就是一段能被执行的代码。每个task都可以包含多个属性。task的基本格式是 <name attribute1="value1" attribute2="value2" ...>,name就是这个task的名字,比如mkdir, delete,也就是要干什么。
在执行Ant的时候,你可以选择运行哪一个target,如果没有选的话,那么就执行default
3)然后就是具体的task了。
task没有什么标签之类的,就是一段能被执行的代码。每个task都可以包含多个属性。task的基本格式是 <name attribute1="value1" attribute2="value2" ...>,name就是这个task的名字,比如mkdir, delete,也就是要干什么。
4)属性
属性并不是必要的元素,但是可以减轻写build.xml文件的工作量,比如很长的老重复用到的字符串,路径什么的。通常要定义的话还是定义在build.xml文件中,一般都写在project标签内,target标签之外,以全局的形式供所有targets使用。
Ant中的属性类似于编程语言中的变量,由name和value组成。然而不同的是,一旦设定好,Ant的值就不可更改了。
Ant中的属性类似于编程语言中的变量,由name和value组成。然而不同的是,一旦设定好,Ant的值就不可更改了。
举个例子
<property name="city" value="helsinki" />
定义好了以后要怎样使用它呢?
<mkdir dir="${city}" />,这个就是使用的格式
这样比较方便修改,如果有很多地方都要用到这样一个值的话,那么定义成property是最好的方式,一次修改,全部都得以更改,减少维护的工作量。
3.编译Java文件的操作
<target name="compile">
<javac srcdir="${src.dir}" destdir="${dist.classes.dir}" debug="true" encoding="GBK">
<classpath refid = "classpath" />
</javac>
</target>
通过这样,就可以将srcdir中的java源文件进行编译,将编译完成后生成的class文件放到destdir中,过程中,需要依赖的jar包都防在classpath中,使用GBK编码方式,把debug的信息也编译进去。
其中,对于classpath的包含方式有很多种,需要用到的时候再去一一详看。
4.复制文件操作
<copy todir="${dist.webapps.dir}/WEB-INF/lib" overwrite="true" flatten="true">
<fileset dir="${lib.dir}">
<include name="*.jar" />
<exclude name="j2ee.jar" />
</fileset>
</copy>
将include里面除了j2ee.jar之外的所有,拷贝到dist.webapps.dir中
当然,还可以进行单个文件的拷贝
<copy file="xxx.txt" todir=".../something/dir" />
5.删除操作
<target name="clean">
<delete dir="${dest.dir}" />
<delete file="${dest2.dir}" />
</target>
特别声明一个我自己常用的操作
ant -DDCHOC_ENV=dev_local migrate-up
dev_local是环境变量,要查看这些东西的话就参照 project_configuration.yml 文件
说明一下,就是几乎所有的task和type都能在ant的源码包里面找到,所以如果需要看看各个标签是干什么的,可以去里面查看。
6.运行Ant
默认情况下如果你直接在command line里面写一个ant,那么它会自动去找当前目录下的build.xml文件,如果你想用其它名字的文件,那么你得写 ant -buildfile file,其中file就是你想要用的task文件。
你也可以在command line里面添加property, ant -Dproperty=value
property就是属性的名称,比如XXX_ENV