Ant 是一个项目开发工具,它为项目的开发设计了一套build模式
l 工作原理
Ant 的工作模型是将项目的构建任务分解,它分为工程,目标和任务3个层次。工程用来描述处于项目层次的内容,目标由用户来编写,不同的目标对应于用户在使用上的一个操作任务单元,基本的和面向特定行为的操作会由Ant在任务的层次上完成,所有任务都可以被目标调用,在目标内被组合装配起来完成用户自定义的一个过程,实现自动化工作的需要。在Ant中的所有设定要素都是遵循XML规范的,并存储在默认的build.xml文件中
1. 工程
工程是对一个项目整个任务过程的抽象,它处于build.xml的最外层:
<project basedir=”.” name=”example” default=”main”>
…
<target name=”main”>
…
</target>
…
</project>
工程标记(project)包含3个属性:
basedir: 指定此工程所在的根目录位置
name: 设定这个工程的名称
default: 设置此工程的build执行时默认的目标(target)入口
2. 目标
目标(target)标记在工程标记之内,一个工程内可以包含任意多个目标:
…
<target name=”init”>
</target>
<target name=”main” depends=”init” description=”demo target”>
</target>
…
目标(target)包含6个属性:
description: 对于这个目标的描述
name: 目标名称
depends: 这个目标所依赖的目标,执行这个目标时将先执行所依赖的目标
if: 检查某个属性是否被设置了,只有这个属性被设置时此目标才被执行
unless: 功能与if相反
id: 标识这个目标的id
3. 任务
任务可以用来执行一个特定的工作,在Ant已经实现很多任务,而且Ant的结构支持用户开发自己的任务,只要在使用之前声明这个任务就可以。
l 基本元素
在编写build的时候,会用到一些基本的任务标记,下面列举了常用的几种:
A. 属性(property)
属性标记用来设定工程中的一些全局性的量值,例如:
…
<property id=”ref” name=”source” value=”src”/>
<property name=”src” refid=”ref”/>
<property name=”jboss.test.location.jbossmx” location=”${build.lib}/jboss.jar”/>
…
B. 路径
在Ant中可以使用classpath在任务中设置Java的类路径,例如:
…
<target name=”compile-classes”>
<mkdir dir=”${build.classes}”/>
<javac destdir=” ${build.classes}” target=”${javac.target}”>
<classpath>
<pathelement location=”${build.classes}”/>
<pathelement location=”${module.source}”/>
<path refid=”javac.classpath”/>
</classpath>
</javac>
</target>
…
也可以使用path设置全局的路径,然后在其他位置引用,例如:
…
<path id=”path”>
<fileset dir=”${lib}”>
<include name=”*.jar”/>
</fileset>
<path element location=”${build.classes}”/>
</path>
<target>
…
<javac …>
<classpath refid=”path”/>
</javac>
</target>
…
C. 文件相关
在build中用得很多的是文件相关标记,下面举例介绍。
(1) fileset
fileset用来描述一些文件对象的集合:
dir 设置fileset的根目录位置
exclude 设置fileset不包含的文件
include 设置fileset包含的文件
…
<fileset dir=”${source.java}”>
<include name=”**/*.properties”/>
<exclude name=”**/javax.servlet.jar”/>
</fileset>
…
(2) dirset
dirset用来描述一些目录对象的集合
dir 设置dirset的根目录位置
exclude 设置dirset不包含的目录
include 设置dirset包含的目录
(3) mkdir
mkdir用来创建文件目录
dir 设置被创建目录的位置
…
<mk dir=”${build}”/>
…
(4) copy
copy用来实现文件复制的任务
todir 设置复制文件的目标位置
fileset 作为被复制的文件集合
…
<copy todir=”${build}/war”>
<fileset dir=”${src}/classes”>
</fileset>
</copy>
…
(5) delete
delete用来实现文件删除的任务
fileset 作为需要删除的文件集合
D. 结构调用
在Ant中不仅可以使用一个build文件,还支持多个build之间的操作,同一build中的多个任务之间也可以相互调用
(1) ant
ant可以用来调用其他的build文件,实现多个子项目一起工作的方式
antfile 指定的外部build文件
target 指定的外部build文件中的一个目标
…
<ant antfile=”anotherbuild.xml”/>
<ant antfile=”anotherbuild.xml” target=”compile”/>
…
(2) antcall
antcall用来调用其他目标
target 指定的目标的名称
param 调用时传递的参数
…
<target name=”init”>
</target>
<antcall target=”init”>
<param name=”param1” value=”value1”/>
</antcall>
…
(3) sequential
sequential实现了一些目标的顺序执行
…
<sequential>
<antcall target=”task1”
</antcall>
<antcall target=”task2”>
</antcall>
</sequential>
…
(4) parallel
parallel实现了一些目标的并行处理
…
<parallel>
<antcall target=”task1”>
</antcall>
<antcall target=”task2”>
</antcall>
</parallel>
…