Ant是一個開放源代碼的構建工具,專門用于構建Java項目。Ant入門的最容易的方法就是編寫一個構建文件------build.xml。當Ant運行時,會在當前目錄下尋找名為build.xml的文件。編寫Ant構建文件:第一步:定義項目(project)在項目根目錄下創建build.xml文件。第一行指明其為XML格式,然后在第二行定義項目。<?xml version="1.0"?><project name="dms" default="compile" basedir=".">一個Ant構建文件定義一個項目,使用<project>元素的name屬性命名項目,將default屬性設為compile,告訴Ant當你在命令行鍵入ant而無其他參數時,將執行構建過程的compile步驟。我們稍候將定義此步驟;將basedir屬性設為".",告訴Ant,該構建文件內的全部其他路徑都是相對于build.xml文件所在路徑而言的。第二步:定義性質(property)下一步,為項目的每一個目錄定義性質,以便讓Ant了解項目的目錄結構。? <property name="build.dir"????? location="build"/>? <property name="build.prod.dir" location="${build.dir}/prod"/>? <property name="build.test.dir" location="${build.dir}/test"/>? <property name="doc.dir"??????? location="doc"/>? <property name="index.dir"????? location="index"/>? <property name="src.dir"??????? location="src"/>? <property name="test.dir"?????? location="test"/>? <property name="vendor.lib.dir" location="vendor/lib"/>location屬性所指的目錄相對于<project>元素定義的basedir屬性值(基目錄)。使用Ant性質命名相對目錄有兩個優點。首先,當Ant運行構建文件時,會定位build.xml文件所在目錄的全部相對目錄。第二個好處是,性質可以使構建文件易于維護。例如用build.dir性質指代build目錄,當以后決定更改build目錄為classes時,只要修改build.dir性質的location屬性值即可。在構建文件中所有引用build.dir性質的地方,都將會自動指向新的classes目錄。第三步:定義路徑(path)下面定義表示項目Java類路徑的路徑。? <path id="project.classpath">??? <pathelement location="${build.prod.dir}" />??? <pathelement location="${build.test.dir}" />??? <fileset dir="${vendor.lib.dir}">????? <include name="*.jar"/>??? </fileset>? </path><path>元素創建路徑project.classpath。我們將在構建過程的編譯步驟用到此路徑。首先,用<pathelement>元素向路徑加入兩個構建目錄,以便Java編譯器可以找到所有的類文件,然后使用<fileset>元素,加入所有廠家.jar文件至此路徑,使Java編譯器可以找到我們用到的廠家類。第四步:定義目標(target)接著我們定義首個構建步驟------稱為“目標”。該目標創建編譯步驟將要存放Java類文件的目錄。? <target name="prepare">??? <mkdir dir="${build.prod.dir}"/>??? <mkdir dir="${build.test.dir}"/>? </target>目標只是定義了一系列任務按照指定的順序執行的有名字的構建步驟。prepare目標使用<mkdir>任務創建構建輸出目錄,這與在命令行上執行mkdir是等效的。但前者可以工作于任何操作系統下,不會因為目錄已經存在而失敗,而且必要時會創建父目錄。第五步:定義編譯步驟終于我們可以定義編譯步驟了。他將編譯所有的產品源文件,將結果類文件放到prepare目標所生成的目錄下。? <target name="compile" depends="prepare">??? <javac srcdir="${src.dir}" destdir="${build.prod.dir}">????? <classpath refid="project.classpath" />??? </javac>? </target>通過目標的depends屬性,可以生成目標間的依存關系,從而指定目標順序。該屬性值是一個目標名間用逗號隔開的清單。例如,compile目標使用depends屬性來聲明與prepare目標的依存關系,這意味著要運行compile目標必須首先運行prepare目標,以在編譯源文件前生成要求的目錄。與shell腳本或批處理文件總是順序執行命令相比,這是一個很大的優點。prepare目標運行后,compile目標運行<javac>任務,從而調用Java編譯器。編譯器處理src.dir性質所指目錄下的全部Java源文件,在build.prod.dir性質所指目錄下生成對應的類文件。<classpath>元素告訴編譯器使用project.classpath代表的值作為類路徑。下面是完整的構建文件: