1、Ant的用途
用于生成Java項目。
跨平臺方式執行文件操作。
使用第三方Ant任務,編寫自定義Ant任務。
2、Ant是什么
Apache Ant是一個基于Java的生成工具。是Another Neat Tool的縮寫。生成工具在軟件開發中用來將源代碼和其他輸入文件轉換為可執行文件的形式。Ant與Make類似,但是具有跨平臺的特色。
3、Ant生成文件剖析
每個生成文件由單個的Project元素組成,Project元素又包含多個target元素。一個target是生成過程中已定義的一個步驟。他執行任意數量的操作。操作本身是由其他專用任務標簽執行的。頂級project元素包含一個default屬性,在Ant被調用而沒有指定目標時,這個屬性將指定要執行的目標。然后需要使用target元素來定義該目標本身。
eg:
<?xml version="1.0"?>
<project default="init">
<target name="init">
</target>
</project>
3、添加描述
Ant自己添加了description元素和description屬性。
4、Ant中的屬性
屬性一旦設置,就不可再改變。
申明屬性的方法:
<property name="metal" value="beryllium"/>
使用屬性的方法:
${metal}
eg:
<property name="metal_database" value="${metal}.db"/>
Ant自定義的屬性:
${user.home}、${ant.version}、${basedir}等等。
Ant 的 location 屬性專門設計用于以平臺無關的方式包含文件系統路徑。您會像下面這樣使 用 location 來代替value:
<property name="database-file" location="archive/databases/${metal}.db"/>
5、定義依賴關系
target元素的depends屬性確定依賴關系。eg:
<target name="compile" depends="init,preprocess"/>
與多個target有依賴關系時,中間用‘,’分開
6、Ant的運行
Ant可以在集成開發環境下(IDE)運行,也可以在命令行運行。
在命令運行的選項有:
沒有參數時,默認尋找build.xml文件
-buildfile(-f) filename 以filename文件作為Ant文件運行
-D propertyName=value 覆蓋生成文件中的初始屬性設置。
7、常用的任務標簽
<javac srcdir="" classpath="" debug="" fork="" executable="filepath"/> debug、fork 可以取true/false。executable指定javac的目錄。eg:d:\sdk141\bin\javac。executable一 般于fork配合使用
<jar destfile="package.jar" basedir="classes"/>
這將創建一個名為 package.jar 的 JAR 文件,并把 classes 目錄中的所有文件添加到其中 (JAR 文件能夠包含任意類型的文件,而不只是類文件)。此處沒有指定清單文件,因此 Ant 將提供一個基本的清單文件。
manifest 屬性允許指定一個用作該 JAR 文件的清單的文件。清單文件的內容還可以使用 manifest 任務在生成文件中指定。這個任務能夠像文件系統寫入一個清單文件,或者能夠實 際嵌套在 jar 之內,以便一次性地創建清單文件和 JAR 文件。 例如:
<jar destfile="package.jar" basedir="classes">
<manifest>
<attribute name="Built-By" value="${user.name}"/>
<attribute name="Main-class" value="package.Main"/>
</manifest>
</jar>
<mkdir dir="${buildDir}"/>
<tstamp/>
<delete dir="${buildDir}"/>
<copy file="src/Test.java" tofile="src/TestCopy.java"/>
<move file="src/Test.java" tofile="src/TestCopy.java"/>
<copy file="src/Test.java" todir="archive"/>
<move file="src/Test.java" todir="archive"/>
<zip destfile="output.zip" basedir="output"/>
<gzip src="output.tar" zipfile="output.tar.gz"/>
<unzip src="output.tar.gz" dest="extractDir"/>
還可以包括 overwrite 屬性來控制覆蓋行為。默認設置是覆蓋與正在被提取的歸檔文件中的 條目相匹配的所有現有文件。相關的任務名稱是 untar、unjar、gunzip 和 bunzip2。
<replace file="input.txt" token="old" value="new"/>
token 屬性指定要查找的字符串,value 屬性指定一個新的字符串,查找到的標記字符串的所 有實例都被替換為這個新的字符串
8、模式匹配
<copy todir="archive">
<fileset dir="src">
<include name="*.java"/>
</fileset>
</copy>
fileset 默認情況下包含指定 src 目錄下的所有文件,因此為了僅選擇 Java 文件,我們對模 式使用一個 include 元素。類似地,我們可以對另一個模式添加一個 exclude 元素,從而潛 在地排除include指定的匹配項。甚至可以指定多個include 和 exclude 元素;這樣將得到一 組文件和目錄,它們包含 include 模式的所有匹配項的并集,但排除了 exclude 模式的所有 匹配項。
9、Ant 可用的核心選擇器的列表:
size:這個選擇器用于根據文件的字節大小選擇文件(除非使用 units 屬性來指定了不同的單位)。when 屬性用于設置比較的性質(less、more 或者 equal),value 屬性定義每個文件將與之作比較的目標大小。
contains:只有包含給定文本字符串(由text 屬性指定)的文件才匹配這個選擇器。默認情況下,查找操作是大小寫敏感的;添加casesensitive="no" 可以改變默認設置。
filename:name 屬性指定文件名要與之匹配的模式。它本質上與 include 元素相同,以及與指定了negate="yes" 時的 exclude 元素相同。
present:從當前目錄結構中選擇如下文件:它們與指定的 targetdir 目錄中的文件具有相同的名稱和相對目錄結構。
depend:這個選擇器與 present 選擇器具有相同的效果,只不過匹配的文件被限制到相對于 targetdir 位置中的對應文件來說,最近已修改過的那些文件。
date:這個選擇器基于其最后修改日期選擇文件。when 屬性指定作比較的性質是 before、after 還是 equal,datetime 屬性指定與之作比較的日期和時間,這個日期和時間具有給定的固定格式 MM/DD/YYYY HH:MM AM_or_PM。注意 Windows 平臺上有一個內置的 2 秒偏移,以允許底層文件系統的不精確性 —— 這可能導致匹配的文件數量超過預期。允許的回旋時間量可以使用 granularity 屬性來更改(以毫秒為單位來指定)。
depth:這個選擇器檢查每個文件的目錄結構層次數目。min 和/或 max 屬性用于選擇具有想要的目錄層次數目的的文件。
eg:
<fileset dir="dir">
<and>
<contains text="hello"/>
<size value="512" when="more"/>
</and>
</fileset>
10、將生成文件鏈接起來
可以使用 antfile 屬性,僅指定那些要使用的生成文件,Ant 將生成該生成文件中的默認目標。例如:<ant antfile="sub-build.xml"/>
在父生成文件中定義的任何屬性默認將傳遞給子生成文件,雖然這可以通過指定 inheritAll="false"來避免。通過使用 property 元素來傳入顯式的屬性也是可以做到的 —— 即使將 inheritAll 設置為 false,這些屬性也仍然適用于子生成文件。這個功能很適合用于給子生成文件傳入參數。
讓我們來考慮一個例子。下面是我們想要調用的一個生成文件:
<?xml version="1.0"?>
<project default="showMessage">
<target name="showMessage">
<echo message="Message=${message}"/>
</target>
</project>
(我們在前面還沒有遇到過 echo 任務 —— 它簡單地輸出給定的消息。)
下面是調用第一個生成文件的第二生成文件,它還給第一個生成文件傳入 message 屬性:
<?xml version="1.0"?>
<project default="callSub">
<target name="callSub">
<ant antfile="sub.xml" target="showMessage" inheritAll="false">
<property name="message" value="Hello from parent build"/>
</ant>
</target>
</project>
11、使用 CVS 知識庫
下面是從 CVS 知識庫提取模塊的一個例子生成文件:
<?xml version="1.0"?>
<project name="CVS Extract" default="extract" basedir=".">
<property name="cvsRoot" value=":pserver:anonymous@dev.eclipse.org:/home/eclipse"/>
<target name="extract">
<cvs cvsRoot="${cvsRoot}"
package="org.eclipse.swt.examples"
dest="${basedir}"/>
</target>
</project>
cvs 任務的主要屬性是 cvsRoot,它是對 CVS 知識庫的完整引用,包括連接方法和用戶詳細信息。這個參數的格式如下:
[:method:][[user][:password]@]hostname[:[port]]/path/to/repository
在上面的例子中,我們作為匿名用戶連接到 Eclipse 項目的中央知識庫。然后其他屬性指定了我們希望提取的模塊以及放置提取文件的目的地。提取是 CVS 任務的默認操作;其他操作可通過使用 command 屬性來指定。
注意,為了利用 Ant 中的 cvs 任務,您需要在機器上安裝 cvs 命令,并使其從命令行可用。
posted on 2005-07-28 11:04
coffee 閱讀(3691)
評論(4) 編輯 收藏