使用Ant
原文:Ant1.5的手冊(manual) 編寫一個簡單的編譯文件(Buildfile) Ant的編譯文件是用XML寫的。每一個編譯文件包含一個項目(project)和至少一個目標(target,可以是缺省的)。目標包含任務(task)元素。編譯文件中的每一個任務元素可以有一個id屬性,
原文:Ant1.5的手冊(manual)
編寫一個簡單的編譯文件(Buildfile)Ant的編譯文件是用XML寫的。每一個編譯文件包含一個項目(project)和至少一個目標(target,可以是缺省的)。目標包含任務(task)元素。編譯文件中的每一個任務元素可以有一個id屬性,屬性可以通過值以后被引用到。屬性值是唯一的。(更多信息,參看下面的任務一節。)
工程(Projects)[i]工程有三種屬性:[/i]
---------------------------------------------------------------------------------------------------------
屬性......描述.......................................................是否必須
name..... 工程的名稱....................................................否
default...當沒有提供目標時,使用缺省.....................................是
basedir...基礎目錄,從它開始計算所有的的路徑。這個屬性可能被先前設置的......否
.........."basedir"特性覆蓋。當出現這種情況時,它必須在project標記中........
..........被刪除。如果沒有設置該屬性或者特性,將使用編譯文件的父目錄。.......
---------------------------------------------------------------------------------------------------------
任意的,工程的描述可以可以被提供為頂級(top-level)的<description>元素(參看描述類型)。
每一個工程定義了一個或多個的目標。目標指你想要執行的任務的集合。當啟動Ant時,可以選擇想要執行的目標。當沒有指定目標時,使用工程的缺省值。
目標(Tasks)目標可以依賴于其他的目標。例如,可以使一個目標編譯,一個目標生成部署。只有編譯完成以后才可以部署,所以部署目標依賴于編譯目標。Ant能解決這些依賴關系。
但是,需要注意的是,Ant的依賴屬性(depends attribute)僅僅指目標被執行的次序,它不會影響那些指定關系的目標是否被執行,如果依賴的目標不需要運行。
Ant試圖去執行目標的次序按它們的依賴屬性出現的順序(從左到右)。需要注意的是,目標可能會被提前執行當它前面的目標依賴它的時候:
<target name="A"/>
<target name="B" depends="A"/>
<target name="C" depends="B"/>
<target name="D" depends="C,B,A"/>
假設我們想要執行目標D。從它的依賴屬性看,你可能會覺得應該首先執行C,然后是B和A。錯了!C依賴于B,B依賴于A,因此A首先被執行,然后是B和C,最后才是D被執行。
一個目標僅僅被執行一次,即使有多于一個目標依賴于它(參看前面的例子)。
當設置if(或者unless)特性的時候,目標有能力控制它是執行。比如,這就允許在編譯的進程中有更好的控制手段,能取決于所使用的系統狀態(
java版本,操作系統,命令行的特性定義,等等)。為了使目標能發揮這個特性,應該加上if(或者unless)屬性來指出跟目標執行有關系的特性的名字。例如:
<target name="build-module-A" if="module-A-present"/>
<target name="build-own-fake-module-A" unless="module-A-present"/>
在第一個例子中,如果module-A-present特性被設置(任何值),目標將執行。在第二個例子中,如果module-A-present特性被設置(同樣是任何值),目標將不被執行。
如果沒有if和unless屬性存在,目標將總是被執行。
可選的描述屬性(description attribute)可以作為目標的一行的描述,它可以被 -projecthelp 命令行選項打印出來。沒有描述的目標被視為內部的,將不被列出,除非用到-verbose或者是-de
bug命令。
把tstamp任務放到被其他目標依賴的,稱為初始化(initialization)目標里是一個好的運用。必須確認的是,這個目標放到被依賴的其他目標中總是首先執行。在這個說明文檔中,大多數的初始化目標的名字是“ init”。
[i]目標有以下的屬性:[/i]
------------------------------------------------------------------------------------------------------------------
屬性..........描述.....................................................是否必須
name.........目標的名字...................................................是
depends......用逗號隔開的指出所依賴的目標的名字列表.........................否
if...........為了執行目標必須要設置的特性的名字.............................否
unless.......為了執行目標不能設置的特性的名字...............................否
description...關于目標功能的簡短描述......................................否
------------------------------------------------------------------------------------------------------------------
目標的名字可以是任何符合XML文件編碼的字母數字串??沾?",逗號","和空格" "也在包括其中。由于它們會引起混淆,以后的Ant版本將不會支持它們,請避免使用這些。集成
開發環境(IDE)支持不尋常的目標名字,或者是其他包含空格的目標名字,各種集成
開發環境會有所不同。
目標以連字符開頭是允許的,比如“-restart”,也可以用來命名那些不會以命令行直接調用的目標。
任務(Tasks)任務是一小段可以執行的代碼
任務可以有多個屬性(或者參數,如果需要)。屬性的值可以包含對特性的引用。這些引用將會先于任務被執行。
任務有通用的結構:
<name attribute1="value1" attribute2="value2" ... />
這里,name是任務的名字,attributeN是屬性名,valueN是屬性值。
有一系列的內部(build-in)任務,伴隨著大量可選(optional)任務,但是自己寫任務也是非常容易的。
所有任務都有一個任務名屬性。這個屬性值將用于Ant產生輸出信息(logging messages)。
任務可以被id屬性標記:
<taskname id="taskID" ... />
這里,taskname是任務名,taskID是任務的唯一性標識。在腳本中可以通過這個名稱來指向相關的任務或其他的任務。比如,在腳本中可以這樣寫:
<script ... >
task1.setFoo("bar");
</script>
用來設置當前這個任務實例的foo屬性。在另一個任務(用
Java寫的)中,可以通過project.getReference("task1")得到它的實例。
注意:1.如果“task1”沒有運行,那么它將不被配置(就是說,沒有屬性被設置),如果它將被配置,任何對實例所做的修改都會被覆蓋。
2.Ant將來的版本將不會對這個行為向后兼容(backward-compatible),因此以后大概根本沒有任務實例,只有代理(proxies)。
特性(Properties)一個工程可以有一個特性集合,這些可以在編譯文件的特性任務中設置,也可在Ant以外設置。特性有名稱(name)和值(value),名字是大小寫敏感的。特性可以被任務的屬性值用到。在屬性值中,通過在特性名左右兩邊加“${”和“}”實現。比如,如果有一個特性“builddir”的值是“build”,它可以在屬性這樣使用:: ${builddir}/classes。這將在運行時被當作build/classes。
內置特性(Built-in Properties)Ant提供對所有系統特性的訪問,就像他們被當作<property>任務被定義了一樣。比如,${os.name}代表操作系統的名稱。
系統特性表,請參見System.getProperties的
Java文檔(
Javadoc)。
dir 工程基礎目錄(basedir)的絕對路徑(作為<project>的屬性被設置為basedir)。
ant.file 編譯文件的覺得路徑。
ant.version Ant的版本號。
ant.project.name 當前被執行工程的名字。它在<project>的屬性name中設置。
ant.
java.version Ant所探測到的虛擬機(JVM)的版本號。當前它可能是"1.1", "1.2", "1.3"和"1.4"這些值之一。
編譯文檔的例子(Example Buildfile)<project name="MyProject" default="dist" basedir=".">
<description>
simple example build file
</description>
<!-- set global properties for this build -->
<property name="src" location="src"/>
<property name="build" location="build"/>
<property name="dist" location="dist"/>
<target name="init">
<!-- Create the time stamp -->
<tstamp/>
<!-- Create the build directory structure used by compile -->
<mkdir dir="${build}"/>
</target>
<target name="compile" depends="init"
description="compile the source " >
<!-- Compile the java code from ${src} into ${build} -->
<javac srcdir="${src}" destdir="${build}"/>
</target>
<target name="dist" depends="compile"
description="generate the distribution" >
<!-- Create the distribution directory -->
<mkdir dir="${dist}/lib"/>
<!-- Put everything in ${build} into the MyProject-${DSTAMP}.jar file -->
<jar jarfile="${dist}/lib/MyProject-${DSTAMP}.jar" basedir="${build}"/>
</target>
<target name="clean"
description="clean up" >
<!-- Delete the ${build} and ${dist} directory trees -->
<delete dir="${build}"/>
<delete dir="${dist}"/>
</target>
</project>
注意,這里我們在任何目標以外聲明特性。<property>,<typedef> 和 <taskdef> 任務都很特別,他們可以在目標以外定義。當這樣做的時候,他們都在任何任務執行前被計算。除此以外,沒有其他任務能在目標以外被定義。
我們已經給出了一些目標的描述,這些將導致使用projecthelp調用命令選項時公開的目標描述被列出顯示,而其他內部目標的將不被列出。
最后,目標使用到src子目錄下源代碼,應該被存放在跟包名相匹配的目錄書中。具體細節請參考<javac>任務。
-未完待續-
原文轉自:http://www.anti-gravitydesign.com
国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97
|