一.Ant簡介:
Ant----Another Neat Tool,是一個基于Java的跨平臺構(gòu)建工具,作為一個優(yōu)秀的構(gòu)建工具Ant有如下的優(yōu)點:
Ø 語法簡單,便于學(xué)習(xí),如果你使用過XMl,就會更加感覺到這一點;
Ø 易于使用,可以減少基于Make方法的大型軟件項目中編寫makefile的人數(shù);
Ø 跨平臺,以一種靈巧的方式管理Java的classpath和文件的目錄結(jié)構(gòu);
Ø 運行速度快,所有的Java都可以在Ant的JVM中啟動;
Ø 與Junit測試框架緊密集成以實現(xiàn)極限編程的單元測試;
Ø 使用Java語言可以很容易的對他進行擴展;
Ø 內(nèi)置對J2EE的開發(fā)的支持,如EJB的編譯和打包等;
Ø 致力于解決Java項目的部署問題:如FTP,Telnet,應(yīng)用服務(wù)器,SQL命令等,這些都可以自動部署.
Ant的官方網(wǎng)站: http://ant.apache.org/
Ant的最新版本:Ant 1.6.5
本文所有的例子運行的環(huán)境:JDK1.4.2,Ant1.6.2,eclipse3.0
二.介紹Ant的DATATYPE和特性
Ant的核心任務(wù)就是target,一個Ant文件有多個target組成,而這些target之間,又有相互的依賴關(guān)系--depends,運行的時候默認運行project中指定的target.在構(gòu)建一個典型的Java工程時,多數(shù)的步驟用于處理文件和路徑(如classpath),Ant提供的datatype可以很自然的處理這兩個概念.文件集和路徑以及其他的幾種類型的datatype,構(gòu)成了Ant的構(gòu)建文件的基本結(jié)構(gòu).
1.路徑(Path)
在javac中我們經(jīng)常使用的就是classpath,一個路徑定義的例子如下:
<classpath>
<pathelement location =”lib/some.jar”/>
</classpath>
location允許你指定單個的文件或者目錄,也可以通過另一個路徑萊擴展當前的路徑,使用path來代替location:
<classpath>
<pathelement path =”build/classes;lib/some.jar”/>
</classpath>
路徑定義中元素間的分隔符可以使用分號,冒號,路徑分隔符可以使用斜杠,反斜杠,不需要考慮操作系統(tǒng)的差異.
2.文件集(Fileset)
所有的構(gòu)建過程都會隱式的對一系列文件進行操作,Ant將文件集看成一種本地的datatype,下面看一個例子,這個例子是將文件從一個目錄copy到另一個目錄中:
<copy todir=”new_web”>
<fileset dir=”web”/>
</copy>
在構(gòu)建過程中我們通常需要包含或者排除一些文件,下面是一些典型的文件集示例:
<fileset>
<include name="**/*Test.java"/>
</fileset>
<fileset>
<exclude name="**/*.jsp"/>
</fileset>
默認情況下,include和exclude中的值是大小寫敏感的,可以通過設(shè)置casesensitive=”false”,來取消它.
還有在許多情況下,IDE和代碼管理系統(tǒng)會生成許多的臨時文件,我們不得已要在每個文件集中去設(shè)置排除子句,為了避免這種情況,Ant針對這些特殊的模式的排除模式在默認情況下是激活的(例如:**/CVS,**/#*#等),詳細模式可以查找相關(guān)的文檔!.
3.模式集(Patternset)
在文件集中使用Ant的另一個核心datatype:模式集,來實現(xiàn)包含和排除功能.模式匹配功能如下:
l * 指代從零到任意長的字符.
l ? 指代單一字符.
l ** 作為目錄名,代表目錄樹上從當前節(jié)電往下的所有目錄,可以是零到任意多個目錄.
l 以/ 或 \結(jié)尾的模式意味著結(jié)尾是**.
4.選擇器(Selector)
Ant1.5以上的版本包含了一個精密的新特性,選擇器,他用來選擇包含在文件集中的文件.介紹幾種常用的內(nèi)建選擇器:
<filename>:基于模式匹配文件,工作方式類似與模式集的include或exclude元素
<size>:以小于,大于,等于該指定值為條件來選擇文件.
<date>:以最后修改時間早于,遲于或等于指定值來選擇文件.
<present>:選擇存在于其他目錄樹的文件.
<contains>選擇包含指定字符串的文件.
這些選擇器都可以被合并到選擇器容器中以提供分組和邏輯表達,這些容器就是<and>,<or>,<not>,<none>和<majority>
比較兩個目錄,并將只在一個目錄下存在的文件復(fù)制到另一個目錄下,我們來結(jié)合使用<not>和<present>
<copy todir="newfiles">
<fileset dir="web">
<not>
<present targetdir="currebtfiles"/>
</not>
</fileset>
</copy>
使用<contains>選擇器,我們可以選擇只包含特定字符串的文件:
<copy todir="newfiles">
<fileset dir="web">
<contains text="System"/>
</fileset>
</copy>.
這里簡單提一下Ant的一個特性:Property,它與java.util.Property在概念上非常相似,它允許在構(gòu)建文件中自定義特性,并且允許將環(huán)境變量作為特性. Property具有特殊的權(quán)限,他可以在<target>之外執(zhí)行,具體的用法,在下面將結(jié)合例子說明.
以上介紹了幾種Ant的常用datatype,Ant還包括很多的datatype,例如過濾集(Filterset),過濾鏈(filterchain),過濾閱讀器(FilterReader),Mapper映射器,ZipFileset等等,可以通過相關(guān)資料來了解!