天天看點

ant 使用指南

一、概述

ant 是一個将軟體編譯、測試、部署等步驟聯系在一起加以自動化的一個工具,大多用于Java環境中的軟體開發。在實際軟體開發中,有很多地方可以用到ant。
開發環境: System:Windows JDK:1.6+ IDE:eclipse ant:1.9.1 <a href="http://hoojo.cnblogs.com/">http://hoojo.cnblogs.com/</a>

二、優點

ant 是Apache軟體基金會JAKARTA目錄中的一個子項目,它有以下的優點:  1、跨平台性:Ant是純Java語言編寫的,是以具有很好的跨平台性。  2、操作簡單:Ant是由一個内置任務和可選任務組成的,用ant任務就像是在dos中寫指令行一樣。Ant運作時需要一個XML檔案(建構檔案)。 Ant通過調用target樹,就可以執行各種task。每個task實作了特定接口對象。  3、維護簡單、可讀性好、內建簡單:由于Ant建構檔案 時XML格式的檔案,是以很容易維護和書寫,而且結構很清晰。Ant可以內建到開發環境中。由于Ant的跨平台性和操作簡單的特點,它很容易內建到一些開發環境中去。

三、安裝和配置

2、解壓zip壓縮包,将壓縮包放置你要放置的目錄。我這裡放置在D:\apache-ant-1.9.1,目錄結構如下:
ant 使用指南
bin是ant的程式運作入口,如果沒有配置ANT_HOME的情況下,可以通過bin目錄中的bat程式進行運作build任務。 如:在cmd中運作ant.bat就可以執行程式,當然你選擇要目前目錄中存在一個build.xml(build.xml是預設的ant執行檔案,當然你可以指定其他檔案)
ant 使用指南
etc目錄中存放的都是一些xsl的輸出模闆,建立一個加強的導出各種任務的XML輸出,使你的build檔案擺脫過時的警告 lib目錄中存放的是ant程式需要依賴的jar包 manual目錄是ant程式的幫助文檔 3、在我的電腦 –&gt; 右鍵屬性 –&gt; 進階系統配置 -&gt; 環境變量 中配置ant 建立系統變量 ANT_HOME = D:\apache-ant-1.9.1
ant 使用指南
這樣環境變量就配置好了,但前提你需要配置jdk的環境變量。如果你沒有配置jdk的環境變量,那麼請你先配置好jdk變量。jdk環境配置方法如下: (1),安裝JDk到其預設目錄:C:\Program Files\Java\jdk1.5.0_05 (沒有jdk去官方下載下傳一個)  C:\Program Files\Java\jdk1.5.0  作用:告訴系統JVM在什麼地方 (2),右擊我的電腦,選屬性,進階,環境變量  (3),在系統變量欄點建立,出現建立系統變量對話框,在變量名中填上JAVA_HOME ,變量值:C:\Program Files\Java\jdk1.5.0_05  (4),确定後在系統變量(S)欄再建立一個環境變量CLASSPATH,變量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar(開頭的dot和;不能少)  (5),确定後在系統變量(S)欄查找并選中變量為Path的選項,點編輯在變量值(V)的末尾添加:  %JAVA_HOME%\bin      如果沒有找到PATH變量,自己建立一個!  如果你不想每次運作都要cmd到class所在目錄然後執行java指令,可以把所有的class檔案放到統一的目錄組織下,然後将此目錄也追加到CLASSPATH下。 測試代碼如下: public class Test {      public static void main(String[] args) {                System.out.println("Hello World!");      }  } 用記事本編輯後存為Test.java(檔案名與類名相同)檔案,打開指令行視窗,  cd到檔案所在目錄下:  javac Test.java                       //編譯指令  java Test                                //執行程式  如果輸出為:Hello World!       OK,配置完畢,否則,重新檢查。

四、測試ant

在啟動,運作cmd的dos視窗中輸入ant,如圖:
ant 使用指南
如果出現這個,那麼恭喜你安裝成功了!否則就失敗了,檢查下前面的步驟有沒有錯誤。上面指令會執行ant程式,ant預設執行build.xml中的任務,這裡在Administrator目錄中沒有這個檔案。 如果安裝失敗,你看看是否存在一些情況: 1、沒有配置JAVA_HOME 或配置錯誤,并且JAVA_HOME\bin\java.exe存在 2、沒有配置ANT_HOEM 或配置錯誤,并且ANT_HOME\bin\ant.bat存在 3、檢查你的環境變量的path變量中,有木有配置...;%ANT_HOME%\bin;... %PATH%=...maybe-other-entries...;%ANT_HOME%\bin;...maybe-other-entries... 

五、ant的運作時環境

ant在運作指令的時候,有時候會出現一些公園的jar庫。這些庫會存在于每個ant工程中,那麼這個時候我們可以把這個jar包放到ant_home\lib目錄中作為全局的庫使用。 如果你不想“污染”原始的ant程式,那麼你可以把jar包放在目前windows使用者的目錄下,具體位置應該是${user.home}/.ant/lib 下。沒有以上目錄可以手動建立。 如果你隻是臨時要添加lib,又不想把lib添加到目前ant工程中。你可以在運作ant程式的時候指定依賴的lib參數。
ant 使用指南
同時,你還可以在目前build工程的classpath目錄中添加你的工程依賴jar包。

六、ant指令

ant 使用指南
文法元素說明如下:  -help  顯示描述ant 指令及其選項的幫助資訊  -projecthelp  顯示包含在建構檔案中的、所有使用者編寫的幫助文檔。即為各個&lt;target&gt;中description 屬性的文本,以及包含在&lt;description&gt;元素中的任何文本。将有description 屬性的目标列為主目标(Main target),沒有此屬性的目标則列為子目标(Subtarget)。  -version  要求ant 顯示其版本資訊,然後退出。  -quiet  抑制并非由建構檔案中的echo 任務所産生的大多數消息。  -verbose  顯示建構過程中每個操作的詳細消息。此選項與-debug 選項隻能選其一。  -debug  顯示Ant 和任務開發人員已經标志為調試消息的消息。此選項與-verbose 隻能選其一。  -emacs  對日志消息進行格式化,使它們能夠很容易地由Emacs 的shell 模式(shellmode)所解析;也就是說,列印任務事件,但并不縮排,在其之前也沒有[taskname]。  -logfile filename  将日志輸出重定向到指定檔案。  -logger classname  指定一個類來處理Ant 的日志記錄。所指定的類必須實作了org.apache.tools.ant.BuildLogger 接口。  -listener classname  為Ant 聲明一個監聽類,并增加到其監聽者清單中。在Ant與IDE或其他Java程式內建時,此選項非常有用。可以閱讀第六章以了解有關監聽者的更多資訊。必須将所指定的監聽類編寫為可以處理Ant 的建構消息接發。  -buildfile filename  指定Ant 需要處理的建構檔案。預設的建構檔案為build.xml。  -Dproperty=value  在指令行上定義一個特性名-值對。  -find filename  指定Ant 應當處理的建構檔案。與-buildfile 選項不同,如果所指定檔案在目前目錄中未找到,-find 就要求Ant 在其父目錄中再進行搜尋。這種搜尋會繼續在其祖先目錄中進行,直至達到檔案系統的根為止,在此如果檔案還未找到,則建構失敗。  -atuoproxy jdk1.5以上的可以使用代理設定  -nouserlib 運作ant時不使用使用者lib中的jar包  -nice 設計主線程優先級  -logfile 使用指定的log日志  -noinput 不允許互動輸入  -keep-going, -k 執行不依賴于所有目标  -propertyfile 加載所有屬性配置檔案 -d 屬性檔案優先

注意:  ● 所有建構檔案都要有&lt;project&gt;元素,而且至少有一個&lt;target&gt; 元素。  ● 對于&lt;project&gt; 元素的default 屬性并不一定需要預設值。  ● 建構檔案并不一定要被命名為build.xml。不過build.xml 是ant 要搜尋的預設檔案名。  ● 每個建構檔案隻能有一個&lt;project&gt; 元素。 在cmd視窗中進入到目前build.xml目錄 ant  在目前目錄下的build.xml運作Ant,執行預設的target。 ant -buildfile build-test.xml  在目前目錄下的build-test.xml運作Ant,執行預設的target。 ant -buildfile build-test.xml clean  在目前目錄下的build-test.xml運作Ant,執行一個叫做clean的target。 ant -buildfile build-test.xml -Dbuild=build/classes clean  在目前目錄下的build-test.xml運作Ant,執行一個叫做clean的target,并設定build屬性的值為build/classes。

七、ant腳本:使用節點、元素和屬性、指令指令

1、project 節點元素

project 元素是 Ant 構件檔案的根元素, Ant 構件檔案至少應該包含一個 project 元素,否則會發生錯誤。在每個 project 元素下,可包含多個 target 元素。接下來向讀者展示一下 project 元素的各屬性。  ● name 屬性:用于指定 project 元素的名稱。  ● default 屬性:用于指定 project 預設執行時所執行的 target 的名稱。  ● basedir 屬性:用于指定基路徑的位置。該屬性沒有指定時,使用 Ant 的構件檔案的附目錄作為基準目錄。
ant 使用指南

2、target節點元素

target為ant的基本執行單元或是任務,它可以包含一個或多個具體的單元/任務。多個target 可以存在互相依賴關系。它有如下屬性:  ● name 屬性:指定 target 元素的名稱,這個屬性在一個 project 元素中是唯一的。我們可以通過指定 target 元素的名稱來指定某個 target 。  ● depends 屬性:用于描述 target 之間的依賴關系,若與多個 target 存在依賴關系時,需要以“,”間隔。 Ant 會依照 depends 屬性中 target 出現的順序依次執行每個 target ,被依賴的target 會先執行。  ● if 屬性:用于驗證指定的屬性是存在,若不存在,所在 target 将不會被執行。  ● unless 屬性:該屬性的功能與 if 屬性的功能正好相反,它也用于驗證指定的屬性是否存在,若不存在,所在 target 将會被執行。  ● description 屬性:該屬性是關于 target 功能的簡短描述和說明。  示例:
ant 使用指南

3、property屬性節點元素

property元素可看作參量或者參數的定義,project 的屬性可以通過 property 元素來設定,也可在 Ant 之外設定。若要在外部引入某檔案,例如 build.properties 檔案,可以通過如下内容将其引:  &lt;property file="build.properties"/&gt;  property 元素可用作 task 的屬性值。在 task 中是通過将屬性名放在${屬性名}之間,并放在 task 屬性值的位置來實作的。  Ant 提供了一些内置的屬性,它能得到的系統屬性的清單與 Java 文檔中 System.getProperties() 方法得到的屬性一緻,這些系統屬性可參考 sun 網站的說明。同時, Ant 還提供了一些它自己的内置屬性,如下:  basedir: project 基目錄的絕對路徑;    ant.file: buildfile的絕對路徑,上例中ant.file值為D:\Workspace\AntExample\build;  ant.version: Ant 的版本資訊,本文為1.8.1 ;  ant.project.name: 目前指定的project的名字,即前文說到的project的name屬性值;  ant.java.version: Ant 檢測到的JDK版本,本文為 1.6 。 舉例說明如下:

上例中使用者設定了名為name 和age的兩個屬性,這兩個屬性設定後,在下文中可以通過 ${name} 和 ${age} 分别取得這兩個屬性值。

4、copy指令

copy主要用來對檔案和目錄的複制功能。舉例如下:  ● 複制單個檔案:  &lt;copy file="old.txt" tofile="new.txt"/&gt; ● 對檔案目錄進行複制:  &lt;copy todir="../dest_dir"&gt;      &lt;fileset dir="src_dir"/&gt;  &lt;/copy&gt; ● 将檔案複制到另外的目錄:  &lt;copy file="src.txt" todir="c:/base"/&gt;

5、delete指令

對檔案或目錄進行删除,舉例如下: ● 删除某個檔案:     &lt;delete file="/res/image/cat.jpg"/&gt; ● 删除某個目錄:     &lt;delete dir="/res/image"/&gt; ● 删除所有的jar檔案或空目錄:  &lt;delete includeEmptyDirs="true"&gt;         &lt;fileset dir="." includes="**/*.jar"/&gt;  &lt;/delete&gt;

6、 mkdir 指令

建立目錄。  &lt;mkdir dir="/home/philander/build/classes"/&gt;

7、 move 指令

移動檔案或目錄,舉例如下:  ● 移動單個檔案:  &lt;move file="sourcefile" tofile=”destfile”/&gt; ● 移動單個檔案到另一個目錄:  &lt;move file="sourcefile" todir=”movedir”/&gt; ● 移動某個目錄到另一個目錄:  &lt;move todir="newdir"&gt;      &lt;fileset dir="olddir"/&gt;  &lt;/move&gt;

8、echo 指令

該任務的作用是根據日志或監控器的級别輸出資訊。它包括 message 、 file 、 append 和 level 四個屬性,舉例如下  &lt;echo message="ant message" file="/logs/ant.log" append="true"&gt;

9、jar 标簽節點元素

該标簽用來生成一個JAR檔案,其屬性如下。  ● destfile表示JAR檔案名。  ● basedir表示被歸檔的檔案名。  ● includes表示别歸檔的檔案模式。  ● exchudes表示被排除的檔案模式。 ● compress表示是否壓縮。

上面的mainfest是jar包中的MEAT-INF中的MANIFEST.MF中的檔案内容 同樣打包操作的的還有war、tgz,已經解壓操作uzip

10、javac 标簽節點元素

該标簽用于編譯一個或一組java檔案,其屬性如下。  ● srcdir表示源程式的目錄。  ● destdir表示class檔案的輸出目錄。  ● include表示被編譯的檔案的模式。  ● excludes表示被排除的檔案的模式。  ● classpath表示所使用的類路徑。  ● debug表示包含的調試資訊。  ● optimize表示是否使用優化。  ● verbose 表示提供詳細的輸出資訊。  ● fileonerror表示當碰到錯誤就自動停止。 示例

11、java 标簽節點元素

該标簽用來執行編譯生成的.class檔案,其屬性如下。  ● classname 表示将執行的類名。  ● jar表示包含該類的JAR檔案名。  ● classpath所表示用到的類路徑。  ● fork表示在一個新的虛拟機中運作該類。  ● failonerror表示當出現錯誤時自動停止。  ● output 表示輸出檔案。  ● append表示追加或者覆寫預設檔案。

12、arg 資料參數元素

由Ant建構檔案調用的程式,可以通過&lt;arg&gt;元素向其傳遞指令行參數,如apply,exec和java任務均可接受嵌套&lt;arg&gt;元素,可以為各自的過程調用指定參數。以下是&lt;arg&gt;的所有屬性。  ● values 是一個指令參數。如果參數中有空格,但又想将它作為單獨一個值,則使用此屬性。  ● file 表示一個參數的檔案名。在建構檔案中,此檔案名相對于目前的工作目錄。  ● line 表示用空格分隔的多個參數清單。  ● 表示路徑,一個作為單個指令行變量的path-like的字元串;或作為分隔符,Ant會将其轉變為特定平台的分隔符。  ● pathref 引用的path(使用path元素節點定義path)的id  ● prefix 字首  ● suffix 字尾 例子  &lt;arg value="-l -a"/&gt;  是一個含有空格的單個的指令行變量。  &lt;arg line="-l -a"/&gt;  是兩個空格分隔的指令行變量。  &lt;arg path="/dir;/dir2:\dir3"/&gt;  是一個指令行變量,其值在DOS系統上為\dir;\dir2;\dir3;在Unix系統上為/dir:/dir2:/dir3 。

13、ervironment 類型

由Ant建構檔案調用的外部指令或程式,&lt;env&gt;元素制定了哪些環境變量要傳遞給正在執行的系統指令,&lt;env&gt;元素可以接受以下屬性。  ● file表示環境變量值的檔案名。此檔案名要被轉換位一個絕對路徑。  ● path表示環境變量的路徑。Ant會将它轉換為一個本地約定。  ● value 表示環境變量的一個直接變量。  ● key 表示環境變量名。  注意 file path 或 value隻能取一個。

14、filelist 檔案集合清單

filelist 是一個支援命名的檔案清單的資料類型,包含在一個filelist類型中的檔案不一定是存在的檔案。以下是其所有的屬性。  ● dir是用于計算絕對檔案名的目錄。  ● files 是用逗号分隔的檔案名清單。  ● refid 是對某處定義的一個&lt;filelist&gt;的引用。  注意 dir 和 files 都是必要的,除非指定了refid(這種情況下,dir和files都不允許使用)。

15、fileset 檔案類型

fileset 資料類型定義了一組檔案,并通常表示為&lt;fileset&gt;元素。不過,許多ant任務建構成了隐式的fileset,這說明他們支援所有的fileset屬性和嵌套元素。以下為fileset 的屬性清單。  ● dir表示fileset 的基目錄。  ● casesensitive的值如果為false,那麼比對檔案名時,fileset不是區分大小寫的,其預設值為true.  ● defaultexcludes 用來确定是否使用預設的排除模式,預設為true。  ● excludes 是用逗号分隔的需要派出的檔案模式清單。  ● excludesfile 表示每行包含一個排除模式的檔案的檔案名。  ● includes 是用逗号分隔的,需要包含的檔案模式清單。  ● includesfile 表示每行包括一個包含模式的檔案名。

16、patternset 類型

fileset 是對檔案的分組,而patternset是對模式的分組,他們是緊密相關的概念。 &lt;patternset&gt;支援4個屬性:includes、excludex、includexfile、excludesfile,這些與fileset相同。 patternset 還允許以下嵌套元素:include,exclude,includefile 和 excludesfile.

17、filterset 類型

filterset定義了一組過濾器,這些過濾器将在檔案移動或複制時完成檔案的文本替換。  主要屬性如下:  ● begintoken 表示嵌套過濾器所搜尋的記号,這是辨別其開始的字元串。  ● endtoken 表示嵌套過濾器所搜尋的記号這是辨別其結束的字元串。  ● id 是過濾器的唯一标志符。  ● refid 是對建構檔案中某處定義一個過濾器的引用。

18、path類型

path元素用來表示一個類路徑,不過它還可以用于表示其他的路徑。在用作幾個屬性時,路經中的各項用分号或冒号隔開。在建構的時候,此分隔符将代替目前平台中所有的路徑分隔符,其擁有的屬性如下。  ● location 表示一個檔案或目錄。Ant在内部将此擴充為一個絕對路徑。  ● refid 是對目前建構檔案中某處定義的一個path的引用。  ● path表示一個檔案或路徑名清單。

八、ant編譯打包、運作工程

要說的的東西基本上就那麼多,ant還有很多内容沒有提到,有興趣的可以自己去研究研究。ant不難,你用它就像是在docs控制台輸入指令行一樣,隻不過ant是将指令行轉換為xml的腳本資訊,可以進行重複的運作。在一定情況下,提高了效率和重複的工作。

本文轉自hoojo部落格園部落格,原文連結:http://www.cnblogs.com/hoojo/archive/2013/06/14/java_ant_project_target_task_run.html,如需轉載請自行聯系原作者

繼續閱讀