天天看點

ANT文法2-

〈project〉标簽屬性

屬性 描述 是否必需

default 要運作的預設目标 是

name 項目名稱 否

basedir 基本目錄 否

description 項目描述 否

  在basedir屬性中,你既可以指定相對路徑也可以指定絕對路徑;不管哪種情況,這都将被解析為其他标簽可以使用的絕對路徑。然而使用一個相對路徑會較好,因為這樣能讓建構更具可移植性。在進行一次建構時,其它開發者的機器以及正式建構用機不需要設定得和你的一樣。以下示例将basedir屬性設定為目前路徑(.)--也就是說,定位到build.xml所在的目錄:

〈project name="Hello" default="compile" basedir="." description = "Hello, world build file"〉

〈project〉标簽可以有以下嵌套元素:

· 〈desciption〉--如果你需要将描述擴充到超過一行,你可以用嵌套元素來包含項目描述,而非用一個屬性。強烈推薦寫上描述。

· 〈target〉--如5.3.4節所述。

· 〈property〉--如5.3.6節所述。

5.3.4 目标

  一個目标(target)就是一個任務或是一組相關任務的容器标簽,可以(粗略地)比喻為一個方法(method)。它可具有如表5.2所列屬性:

表5.2 〈target〉标簽屬性

屬性 描述 是否必需

name 目标名稱 是

depends 依賴關系清單 否

if 僅當設定了指定屬性時執行 否

unless 僅當未設定指定屬性時執行 否

description 目标描述 否

  為你的主要目标給出一份描述是個好主意,因為Ant提供了一個-projecthelp選項來列出所有具有描述的目标,并把它們作為主要目标。這個選項令你的建構文檔在一定程度上可以進行自我文檔編制。

  這裡是一個例子:

〈target name="compile" depends="init" description="Compile all sources"〉

5.3.5 任務

  如果把一個目标比喻為一個方法,一個任務(task)可以比喻為方法中的一條語句。Ant提供了大量的任務--超過100條,如果你把核心任務和可選任務都算上。

  Ant的巨大優點之一是它對跨平台問題是透明處理的。例如,在UNIX中,一個檔案路徑在目錄和檔案間用的是向前的斜線(/),而在Windows中,用的是一個反斜線(\)。在Ant中,你都可以使用,然後Ant會提供對你正在使用的系統來說正确的格式。對于類路徑來說也是一樣的。在UNIX中,一個類路徑中不同的路徑是用一個冒号分隔的,而在Windows中使用的則是一個分号;你兩個都可以用,剩下的事情就交給Ant了。

  以下是一些常見的人物,它們都有一組基本屬性--足以了解示例并開始編寫你自己的建構檔案。需要一份所有任務及其選項的完整描述的話,請參考http://ant.apache.org/manual/index.html上的Ant文檔。

〈buildname〉

  該任務從一個檔案中讀取建構号(build number),将屬性build.number設定為該号碼,然後将build.number的值+1後寫回檔案。它隻有一個屬性,如表5.3中所列:

表5.3 〈buildname〉任務屬性

屬性 描述 是否必需

file 要讀取的檔案(預設:build.number) 否

  這裡是一個例子:

〈buildnumber file="buildnum.txt" /〉

〈copy〉

  該任務複制一個或一組檔案。要拷貝單個的檔案,用file屬性即可。要拷貝多個檔案,需要用一個嵌套的〈fileset〉元素。

  通常,該任務僅當目标檔案不存在或比源檔案舊時才執行複制,但你可以通過設定override屬性為true來改變預設行為。〈copy〉任務的屬性如表5.4中所列:

表5.4 〈copy〉任務屬性

屬性 描述 是否必需

file 源檔案名 是,除非使用了〈fileset〉

tofile 目标檔案名 是,除非使用了todir

todir 目标目錄 是,如果拷貝一個以上的檔案

overwrite 覆寫更新的目标檔案 否;預設是false

includeEmptyDirs 複制空目錄 否;預設是true

failonerror 如果找不到檔案則停止建構 否;預設是true

verbose 列出已複制的檔案 否;預設是false

  一個〈fileset〉嵌套元素可以用來指定一個以上的檔案。(參看5.3.7節。)

  這裡是一個示例:

〈copy file="log4k.properties" todir="bin"/〉

〈delete〉

  該任務删除一個或一組檔案,或者一個目錄。要删除單個的檔案,用file屬性即可。要删除多個檔案,則要用一個嵌套的〈fileset〉元素。要删除目錄,用directory屬性即可。〈delete〉任務的屬性如表5.5中所列:

表5.5 〈delete〉任務屬性

屬性 描述 是否必需

file 要删除的檔案 是,除非使用了〈fileset〉或dir

dir 要删除的目錄 是,除非使用了〈fileset〉或file

verbose 列出已删除的檔案 否;預設是false

failonerror 如果出錯則停止建構 否;預設是true

includeEmptyDirs 使用〈fileset〉時删除檔案夾 否;預設是false

  一個嵌套的〈fileset〉元素可以用來指定一個以上的檔案。(參看5.3.7節。)

  這裡是兩個例子:

〈delete file="ant.log"/〉〈delete dir="temp"/〉

〈echo〉

  該任務将一條資訊寫到System.out(預設),一個檔案,一份日志,或者一個偵聽器。它的屬性如表5.6中所列:

表5.6 〈echo〉任務屬性

屬性 描述 是否必需

message 要寫入的文本 是,除非用了文本作為元素内容

file 輸出檔案 否

append 附加到檔案(而非覆寫) 否;預設是false

這裡有一些例子:

〈echo message="Hello"/"〉〈echo〉  This is a message from Ant.〈/echo〉

〈jar〉

  該任務将一組檔案壓縮到一個JAR檔案中。允許的選項如表5.7中所示:

表5.7 〈jar〉任務屬性

屬性 描述 是否必需

destfile JAR檔案名 是

basedir 要打包的檔案的基本目錄 否

includes 要打包的檔案的模式清單 否

excludes 要排除的檔案的模式清單 否

  模式清單是由逗号或空格分隔的檔案比對模式清單。〈jar〉接受如同〈fileset〉元素的嵌套元素。(參看5.3.7節。)

  這裡是一些例子:

〈jar destfile="dist/persistence.jar"  basedir="bin"  includes=  "org/eclipseguide/persistence*.class"/〉  〈exclude name="***Test*"〉  〈classpath〉    〈pathelement path="${java.class.path}"/〉    〈pathelement location="D:/log4j/jakarta-log4j-1.2.7/dist/lib/log4j-1.2.7.jar"/〉  〈/classpath〉〈/javac〉

〈javadoc〉

  任務〈javadoc〉從Java源代碼檔案生成一份Javadoc。任務jar、java中用于選擇要包含哪些檔案的選項應該比較熟悉了。指定給javadoc的首要選項設定了要包含哪些Javadoc注釋;參看表5.10。

表5.10 〈javadoc〉任務屬性

屬性 描述 是否必需

sourcepath 源碼樹的根 是,除非指定了sourcefiles或者sourcepathref

sourcepathref 到一個指定源碼樹根的路徑結構的引用 是,除非指定了sourcepath或者sourcefiles

sourcefiles 源碼檔案的逗号分隔清單 是,除非指定了sourcepath或者sourcepathref

destdir 目标目錄 是,除非已經指定了doclet

classpath 類路徑(Classpath) 否

public 僅顯示公共類及成員 否

protected 顯示公共和保護的類及成員 否;預設是true

package 顯示包,保護和公共的類及成員 否

private 顯示所有的類及成員 否

version 包含@version資訊 否

use 包含@use資訊 否

author 包含@author資訊 否

failonerror 出錯時停止建構 否;預設是true

  任務〈javadoc〉可用以下嵌套元素:

· 〈fileset〉--可用于選擇一組檔案。Ant自動把***.java"/〉    〈exclude name="***.java來包含所有的Java源檔案,也可以在exclude屬性中用模式***.java"  excludes = "***.java"/〉  〈exclude name="**/*Test*"/〉〈/fileset〉

〈classpath〉

  〈classpath〉元素讓你可以指定哪些目錄和JAR檔案是當類要運作時(或者,對于Java編譯器來說,要編譯時),程式應該搜尋的。預設情況下,Ant繼承了環境的類路徑,但你都需要為特定程式(如JUnit)添加額外的目錄或JAR檔案。使用類路徑的任務提供了一個classpath屬性,但有時使用一個〈classpath〉嵌套元素會更友善些──尤其是當類路徑很長的時候。路徑可以包含用一個冒号或一個分号隔開的多個檔案或目錄;Ant會将分隔符轉換為适合于目前作業系統的字元。

  表5.13中列出了〈classpath〉元素的屬性。

表5.13 〈classpath〉元素屬性

屬性 描述 是否必需

path 冒号或分号分隔的路徑 否

location 單個檔案或目錄 否

  一個或多個〈pathelement〉元素可以通過嵌套來構造一個更長的類路徑。〈pathelement〉接受和〈classpath〉:path以及location相同的屬性。

  此外,一個〈fileset〉可以用于指定檔案。

  這是一些例子:

〈classpath path = "bin"/〉〈classpath〉  〈pathelement path="${java.class.path}"/〉  〈pathelement location="${junit_path}"/〉  〈pathelement location="${log4j_path}"/〉〈/classpath〉

5.3.8 Ant的額外能力

  這裡講述的基本知識已經足以讓你開始用Ant來工作而不會不知所措了。當你用Ant做更多的事情之後,你很可能會遇到一種情況──也許會發覺你一直在反複使用相同的〈filelist〉──并想知道有沒有一種比剪切、粘貼更優雅的解決方案。通常,你會發現在Ant中,幾乎沒有什麼是不可能的。

  減少備援代碼的一種方法是使用引用。例如,Ant中的每個元素都能指定一個ID;并且(取決于涉及的元素的類型)你可以在建構檔案中的其它地方使用ID來引用那個元素。例如,你可以使用id屬性給一個〈classpath〉指定一個辨別符:

〈classpath id="common_path"〉  〈pathelement path="${java.class.path}"/〉  〈pathelement location="${junit_path}"/〉  〈pathelement location="${log4j_path}"/〉〈/classpath〉

  這樣一來,這個類路徑就可以在别的地方用refid屬性來引用:

〈javac srcdir="src" destdir="bin"〉  〈classpath refid=common_path/〉〈/javac〉

  Ant提供了任務和類型以供你過濾檔案,如同以文本來複制、替換符号一樣,這樣你就能夠在你的建構中包含版本資訊──例如,使用帶有一個〈filterset〉的〈copy〉任務。它讓你可以通過使用選擇器類型(如〈contains〉,〈date〉和〈size〉)來按照複雜的條件選擇檔案。在很罕見的情況下,Ant沒有可以符合你需求的任務,你會發現編寫自己的Ant任務是很簡單的事情。