1 没有指定任何参数时,Ant会在当前目录下查询build.xml文件
2 可以指定执行一个或多个target。当省略target时,Ant使用标签的default属性所指定的target
3 编写build.xml (ant 1.8.2)
3.1 Project
<project name="demo" default="all" basedir=".">
</project>
project有下面的属性:
(1) name –项目名称(Required:No)
(2) default –当没有指定target时使用的缺省target (Required:No)
(3) basedir –用于计算所有其他路径的基路径。该属性可以被basedir property覆盖。如果属性和basedir property都没有设定,就使用buildfile文件的父目录。 (Required:No)
3.2 Targets
<target name="A"/>
<target name="B" depends="A"/>
<target name="C" depends="B"/>
<target name="D" depends="C,B,A"/>
假定我们要执行target D。C依赖于B,B依赖于A,所以先执行A,然后B,然后C,最后D被执行。
一个target只能被执行一次,即时有多个target依赖于它。
<target name="build-module-A" if="module-A-present"/>
<target name="build-own-fake-module-A" unless="module-A-present"/>
module-A-present有值,执行target build-module-A,不执行target build-own-fake-module-A。
target有下面的属性:
(1) name –target的名字 (Required Yes)
(2) depends –用逗号分隔的target的名字列表,也就是依赖表。 (Required No)
(3) if –满足条件执行(true)。 (Required No)
(4) unless –不满足条件执行(false)。 (Required No)
(5) description –关于target功能的简短描述。 (Required No)
(6) extensionOf –把当前target加入到指定target的依赖中。(Required No) –ant 1.8.0
(7) onMissingExtensionPoint –如果(6)中指定的target不存在怎么办(“fail”,”warn”,”ignore”)。(Required No ,必须设置了extensionOf才能用,默认“fail”.) –ant 1.8.2
3.3 Tasks
一个task是一段可执行的代码。
可以给task赋一个id属性:
<taskname id="taskID" ... />
这里taskname是task的名字,而taskID是这个task的唯一标识符。通过这个标识符,你可以在脚本中引用相应的task。例如,在脚本中你可以这样:
<script ... >
task1.setFoo("bar");
</script>
设定某个task实例的foo属性。在另一个task中(用java编写),你可以利用下面的语句存取相应的实例。
project.getReference("task1").
注意:如果task1还没有运行,就不会被生效(例如:不设定属性),如果你在随后配置它,你所作的一切都会被覆盖。
3.4 Properties
(1)
<property file="sample.properties"/>
<--在属性文件 sample.properties中: -->
dir.build=builddir.src=srcjdom.home=../java-tools/jdom-b8jdom.jar=jdom.jarjdom.jar.withpath=${jdom.home}/build/${jdom.jar}
(
2)
<property name="builddir" value="build" />
${builddir} /classes可被解析为build/classes
内置属性
例如,${os.name}对应操作系统的名字。
java.version Java Runtime Environment version
java.vendor Java Runtime Environment vendor
java.vendor.url Java vendor URL
java.home Java installation directory
java.vm.specification.version Java Virtual Machine specification version
java.vm.specification.vendor Java Virtual Machine specification vendor
java.vm.specification.name Java Virtual Machine specification name
java.vm.version Java Virtual Machine implementation version
java.vm.vendor Java Virtual Machine implementation vendor
java.vm.name Java Virtual Machine implementation name
java.specification.version Java Runtime Environment specification version
java.specification.vendor Java Runtime Environment specification vendor
java.specification.name Java Runtime Environment specification name
java.class.version Java class format version number
java.class.path Java class path
java.library.path List of paths to search when loading libraries
java.io.tmpdir Default temp file path
java.compiler Name of JIT compiler to use
java.ext.dirs Path of extension directory or directories
os.name Operating system name
os.arch Operating system architecture
os.version Operating system version
file.separator File separator ("/" on UNIX)
path.separator Path separator (":" on UNIX)
line.separator Line separator ("\n" on UNIX)
user.name User's account name
user.home User's home directory
user.dir User's current working directory
baseddir –project基目录的
绝对路径 (与的basedir属性一样)
ant.file –buildFile的绝对路径
ant.version –Ant的版本
ant.project.name –当前执行的project的名字,由的name属性设定
ant.project.default-target –当前执行的project的default-target名字
ant.project.invoked-targets –a comma separated list of the targets that have been specified on the command line (the IDE, an task …) when invoking the current project.
ant.java.version –Ant版本(“1.2”,“1.3”,“1.4”,“1.5”,“1.6”)
ant.core.lib –ant.jar文件的绝对路径
3.5 Path-like Structures
你可以用”:”和”;”作为分隔符,指定类似PATH和CLASSPATH的引用。Ant会把分隔符转换为当前系统所用的分隔符。
当需要指定类似路径的值时,可以使用嵌套元素。一般的形式是
<classpath>
<pathelement path="${classpath}"/>
<pathelement location="lib/helper.jar"/>
</classpath>
location属性指定了相对于project基目录的一个文件和目录,而path属性接受逗号或分号分隔的一个位置列表。path属性一般用作预定义的路径--其他情况下,应该用多个location属性。
为简洁起见,classpath标签支持自己的path和location属性。所以:
<classpath>
<pathelement path="${classpath}"/>
</classpath>
可以被简写作:
<classpath path="${classpath}"/>
也可通过元素指定路径。构成一个fileset的多个文件加入path-like structure的顺序是未定的。
<classpath>
<pathelement path="${classpath}"/>
<fileset dir="lib">
<include name="**/*.jar"/>
</fileset>
<pathelement location="classes"/>
</classpath>
上面的例子构造了一个路径值包括:${classpath}的路径,跟着lib目录下的所有jar文件,接着是classes目录。
如果你想在多个task中使用相同的path-like structure,你可以用元素定义他们(与target同级),然后通过id属性引用。
path-like structure可能包括对另一个path-like structurede的引用(通过嵌套元素):
<path id="base.path">
<pathelement path="${classpath}"/>
<fileset dir="lib">
<include name="**/*.jar"/>
</fileset>
<pathelement location="classes"/>
</path>
<path id="tests.path">
<path refid="base.path"/>
<pathelement location="testclasses"/>
</path>
前面所提的关于的简洁写法对于也是有效的
<paid="base.path">
<pathelement path="${classpath}"/>
</path>
可th id=”base.path” path=”${classpath}”/>
命令行变量
有些task可接受参数,并将其传递给另一个进程。为了能在变量中包含空格字符,可使用嵌套的arg元素。
value –一个命令行参数;可包含空格字符。
line –空格分隔的命令行参数列表。
file –作为命令行变量的文件名;会被文件的绝对名替代。
path –…
pathref –…
prefix –…
suffix –…
例子
<arg value="-l -a"/>
是一个含有空格的单个的命令行变量,不分“-l”和”-a”
<arg line="-l -a"/>
,“-l”和”-a”
是两个空格分隔的命令行变量。
<arg path="/dir;/dir2:\dir3"/>
是一个命令行变量,其值在DOS系统上为\dir;\dir2;\dir3;在Unix系统上为/dir:/dir2:/dir3 。
References
buildFile元素的id属性可用来引用这些元素。如果你需要一遍遍的复制相同的XML代码块,这一属性就很有用--如多次使用结构。
下面的例子:
<project ... >
<target ... >
<rmic ...>
<classpath>
<pathelement location="lib/"/>
<pathelement path="${java.class.path}/"/>
<pathelement path="${additional.path}"/>
</classpath>
</rmic>
</target>
<target ... >
<javac ...>
<classpath>
<pathelement location="lib/"/>
<pathelement path="${java.class.path}/"/>
<pathelement path="${additional.path}"/>
</classpath>
</javac>
</target>
</project>
可以写成如下形式:
<project ... >
<path id="project.class.path">
<pathelement location="lib/"/>
<pathelement path="${java.class.path}/"/>
<pathelement path="${additional.path}"/>
</path>
<target ... >
<rmic ...>
<classpath refid="project.class.path"/>
</rmic>
</target>
<target ... >
<javac ...>
<classpath refid="project.class.path"/>
</javac>
</target>
</project>
所有使用PatternSets, FileSets 或 path-like structures嵌套元素的task也接受这种类型的引用。