在正式開始編寫腳本之前,我們需要下載安裝相應的軟件。
- Eclipse:爲了使 Ant 的開發更加簡單,我們選擇了 Eclipse3.1 作爲開發環境。當然你可以使用任何你喜歡的文本編輯工具來開發你的 Ant。Eclipse 的最新版本可以在 http://eclipse.org/ 上下載。
- Ant:Ant 是基於 Java 的編譯工具,它就像 C/C++ 中的 make,但是沒有 make 那樣難用。Ant 的最新版本可以在 http://ant.apache.org/bindownload.cgi 上下載。如果你用 Eclipse 來開發 Ant,則不用去單獨下載 Ant,因爲在 Eclipse 中已經集成了 Ant。
每個生成文件由單個
project
元素組成,該元素又包含一個或多個 target
元素。一個目標(target)是生成過程中已定義的一個步驟,它執行任意數量的操作,比如編譯一組源文件。頂級
project
元素需要包含一個 default
屬性,如果在 Ant 被調用時沒有指定目標,這個屬性將指定要執行的目標。然後需要使用 target
元素來定義該目標本身。下面是一個最基本的生成文件:<project default="init" name="Project Name">
<description>
A simple project introducing the use of descriptive tags in Ant build files.
</description>
<!-- XML comments can also be used -->
<target name="init" description="Initialize database">
<!-- perform initialization steps here -->
</target>
</project>
2.2 屬性
Ant 中的屬性 類似編程語言中的變量,它們都具有名稱和值。然而與通常的變量不同,一經設置,Ant 中的屬性就不可更改;它們是不可變的,就像 Java 語言中的
String
對象。爲了在生成文件的其他部分引用這個屬性,您會使用以下語法:
${user.home}
。2.3 屬性文件(properties)
在上面的例子中,所有的路徑信息都是寫在 build.xml 中。但是 Ant 腳本可能在不同的機器或者不同的系統上運行,也有可能一些值需要根據環境的不同而變化,在 Ant 中可以把所有這些可能變化的地方都放到一個配置文件中,然後在 Ant 腳本中引用這個配置文件就可以了,如下所示:
<property file="build.properties"/>
<target name="init">
<mkdir dir="${dest.dir}" />
</target>
<target name="compile" depends="init">
<javac srcdir="${src.dir}" destdir="${dest.dir}"/>
<echo>Build into ${dest.dir}, successfully.</echo>
</target>
</project>
build.properties的內容:
dest.dir=c:/temp/dest/testProj
src.dir=c:/temp/src/testProj
2.4 依賴關係
生成一個項目一般需要許多步驟 —— 例如首先要編譯源代碼,然後將它打包爲 Java 歸檔文件(Java Archive File,JAR)。這其中許多步驟都具有清楚定義的順序。每個目標的定義依據的是在它在能夠執行之前必須完成的其他所有目標。這是使用
target
元素的 depends
屬性來實現的。<target name="preprocess" depends="init"/>
<target name="compile" depends="init,preprocess"/>
<target name="package" depends="compile"/>
2.5 命令行執行
-buildfile <file>
參數(-f <file>
是其簡寫形式)。2.6 綜合
下面將把這些代碼片斷組合成一個完整的生成文件,它將編譯
src
目錄下的所有源代碼,將結果類文件放在 build
目錄下,然後把所有類文件打包到 dist
目錄中的一個 JAR 文件中。<project default="dist" name="Project Argon">
<description>A simple Java project</description>
<property name="srcDir" location="src"/>
<property name="buildDir" location="build"/>
<property name="distDir" location="dist"/>
<target name="init">
<tstamp/>
<mkdir dir="${buildDir}"/>
<mkdir dir="${distDir}"/>
</target>
<target name="compile" depends="init">
<javac srcdir="${srcDir}" destdir="${buildDir}"/>
</target>
<target name="dist" depends="compile">
<jar destfile="${distDir}/package-${DSTAMP}.jar" basedir="${buildDir}">
<manifest>
<attribute name="Built-By" value="${user.name}"/>
<attribute name="Main-Class" value="package.Main"/>
</manifest>
</jar>
<jar destfile="${distDir}/package-src-${DSTAMP}.jar" basedir="${srcDir}"/>
</target>
<target name="clean">
<delete dir="${buildDir}"/>
<delete dir="${distDir}"/>
</target>
</project>
注意 JAR 文件是根據當前日期來命名的,並且爲應用程序的主類設置了一個清單條目,以便主類能夠通過一個簡單的命令 java -jar package-20031217.jar
來直接運行。我們還創建了一個 JAR 文件,它僅包含項目的源代碼。
創建: <mkdir dir="archive/metals/zinc"/>
刪除: <delete dir="archive/metals/zinc"/>
刪除指定的目錄連同它包含的所有文件以及子目錄。 拷貝:
<copy file="src/Test.java" tofile="src/TestCopy.java"/>
2.8 模式匹配
<fileset dir="src">
<include name="*.java"/>
</fileset>
</copy>
file
屬性替換爲一個 fileset
元素,如下所示:fileset
默認情況下包含指定 src
目錄下的所有文件,因此爲了僅選擇 Java 文件,我們對模式使用一個 include
元素。類似地,我們可以對另一個模式添加一個 exclude
元素,從而潛在地排除include
指定的匹配項。甚至可以指定多個include
和 exclude
元素;這樣將得到一組文件和目錄,它們包含 include
模式的所有匹配項的並集,但排除了 exclude
模式的所有匹配項。參考IBM ANT使用教程
IBM教程: https://www6.software.ibm.com/developerworks/cn/education/java/j-apant/tutorial/j-apant.zip