Apache Ant是一个将软件编译、测试、部署等步骤联系在一起加以优化的构建工具,常用于Java环境中的软件开发。Ant的默认配置文件是build.xml。
构建就是把代码从某个地方拿来、编译、再考呗到某个地方去等操作,当然不仅于此,但是主要用来干这个。
(1)Ant没有定义自己的自定义语法;它的生成文件是用xml编写的
(2)可以定义新的元素来扩展Ant的功能;
(3)每个生成文件由单个project元素组成,该元素中又包含一个或多个target元素
(4)一个生成过程所必需的所有操作可以放入单个target元素中,但是那样会降低灵活性;
(5)顶级project元素需要包含一个default属性,如果在Ant被调用时没有指定目标,这个属性将指定要执行的目标;
一个最基本的生成文件示例:
<?xml version="1.0"?>
<project default="init">
<target name="init">
</target>
</project>
<?xmlversion="1.0"?>
<projectdefault="init" name="Project Argon">
<description>
A simple project introducing the use ofdescriptive tags in Ant build files.
</description>
<!--XML comments can also beused-->
<target name="init"description="Initialize Argon database">
<!--perform initialization stepshere-->
</target>
</project>
(注:注释提高清晰性;定义自己的description元素和description属性,可用于提供更结构化的注释)
(1)类似编程语言中的变量,具有名称和值;
(2)与编程语言中的变量的不同之处:设置后不可更改;
<!--设置属性名称为"metal",值为"beryllium"-->
<propertyname="metal" value="beryllium"/>
<!--在生成文件的其他部分引用metal这个属性,使用如下关键字-->
${metal}
<!--例如-->
<propertyname="metal-database value="${metal}.db">
生成一个项目一般需要许多步骤,例如先要编译源代码,然后将它打包为Java归档文件(Java Archive File.JAR),其中许多步骤都具有清楚定义的顺序,例如在编译器从源代码生成类文件之前,不能打包类文件,与顺序指定target所不同的是,Ant采用一种更灵活的方法来定义依赖关系。
每个目标的定义依据的是在它在能够执行之前必须完成的其他所有目录。
这是使用target元素的depends属性实现的。
例如:
<targetname="init"/>
<targetname="preprocess" depens="init"/>
<targetname="compile" depends="init,preprocess"/>
<targetname="package" depends="compile"/>
——如果让 Ant完成 compile步骤,它将判断出需要首先执行 init和preprocess这两个目标。init目标不依赖其他任何目标,因此它将首先被执行。然后 Ant检查 preprocesstarget,发现它依赖 init目标;由于已经执行了后者,Ant不会再次执行它,因而开始执行 preprocess目标。
最后可以执行 compile任务本身。注意目标出现在生成文件中的顺序并不重要:执行顺序是由depends属性唯一确定的。
所以,如果让Ant完成compiled步骤,执行顺序为:init、preprocess、compile;
用 Ant开发 java程序,以 Hell oWord为例:
(1)本次实例的目录结构:
D: \test 主目录
\src 源程序目录
\classes编译后的 cl ass文件目录
首先在 D盘创建 t est目录和 src子目录。
(2)在 src子目录下创建 HelloWord.java文件,内容如下:
public classHelloWord
{
public static voidmain(String args[ ] )
{
System. out .println("Hello World!");
}
}
(3)在 test主目录下创建bui l d. xml文件,内容如下:
<?xmlversion="1.0"?>
<projectdefault="build" basedir=".">
<properyname="appname" value="HelloWord"/>
<propery name="base"value="D:test"/>
<propery name="src"value="src"/>
<propery name="build"value="classes"/>
<propery name="myclasspath"value="${base}\${build}"/>
<target name="build">
<mkdir dir="${build}"/>
<javac srcdir="${src}"destdir="${build}">
<includename="**/*.java"/>
</javac>
</target>
<target name="run"depends="build">
<exec executable="java">
<arg line=" -classpath${myclasspath} ${appname}"/>
</exec>
</target>
<target name="clean">
<deleteincludeEmptyDirs="true">
<filesetdir="${build}"/>
</delete>
</target>
</project>
为了提高程序的可移植性,我们将property分离出来组成 build.properties文件。新的
build.xml文件和 build.properties文件内容如下:
build.properties 文件:
appname=HelloWord
src=src
build=classes
myclasspath=${basedir}\\${build}
build.xml文件(property部分通过file调用 build. properties即可):
<?xmlversion="1.0"?> <projectdefault="build" basedir="."> <propertyfile="build.properties" /> <target name="build"> <mkdir dir="${build}"/> <javac srcdir="${src}"destdir="${build}"> <includename="**/*.java"/> </javac> </target> <target name="run"depends="build"> <exec executable="java"> <arg line=" -classpath${myclasspath} ${appname}"/> </exec> </target> <target name="clean"> <deleteincludeEmptyDirs="true"> <filesetdir="${build}"/> </delete> </target> </project>
(4)在 test目录下运行ant (ant run)查看执行结果:
(1)Ant——基于 Java 的生成工具。
(2)Ant核心概念:
XML:构建文件是以XML文件来描述的;
project:每个构建文件包含一个工程;
depends:每个工程包含若干个目标(target).目标可以7依赖于其他的目标;
task:目标包含一个或多个任务(task);
易于扩展:易于使用java语言增加新的任务(自定义);
语法简单:构建文件短小精悍,语法直观易于理解。