請參考:ant的安裝與驗證html
當開始一個新的項目時。首先應該編寫Ant構建文件。java
構建文件定義了構建過程,並被團隊開發中每個人使用。Ant構建文件默認命名爲build.xml,也可以取其它的名字。apache
僅僅只是在執行的時候把這個命名看成參數傳給Ant。構建文件可以放在不論什麼的位置。通常作法是放在項目頂層文件夾中,這樣可以保持項目的簡潔和清晰。如下是一個典型的項目層次結構。
(1) src存放文件。
(2) class存放編譯後的文件。app
(3) lib存放第三方JAR包。less
(4) dist存放打包,公佈之後的代碼。
Ant構建文件是XML文件。每個構建文件定義一個惟一的項目(Project元素)。ide
每個項目下可以定義很是多目標(target元素)。這些目標之間可以有依賴關係。當運行這類目標時,需要運行他們所依賴的目標。每個目標中可以定義多個任務,目標中還定義了所要運行的任務序列。Ant在構建目標時必須調用所定義的任務。任務定義了Ant實際運行的命令。Ant中的任務可以爲3類。
(1) 核心任務。優化
核心任務是Ant自帶的任務。
(2) 可選任務。ui
可選任務實來自第三方的任務。所以需要一個附加的JAR文件。
(3) 用戶本身定義的任務。用戶本身定義的任務有用戶本身開發的任務。spa
如下我將用一個build.xml文件來講明常見標籤的使用.net
每個構建文件相應一個項目。<project>標籤時構建文件的根標籤。它可以有多個內在屬性。就如代碼中所看到的,其各個屬性的含義分別例如如下。
(1) default表示默認的執行目標,這個屬性是必須的。
(2) basedir表示項目的基準文件夾。
(3) name表示項目名。
(4) description表示項目的描寫敘述。
每一個構建文件都相應於一個項目,但是大型項目經常包括大量的子項目,每一個子項目都可以有本身的構建文件。
演示樣例:
<?xml version="1.0" encoding="gb2312" ?> <project name="test" default="jar" basedir="."> <path id="classpath"> <fileset dir="./lib" includes="*.jar"/> </path> </project>
一個項目標籤下可以有一個或多個target標籤。一個target標籤可以依賴其它的target標籤。好比,有一個target用於編譯程序。還有一個target用於聲稱可運行文件。在生成可運行文件以前必須先編譯該文件。所以可運行文件的target依賴於編譯程序的target。
Target的所有屬性如下。
(1) name表示標明,這個屬性是必須的。
(2) depends表示依賴的目標。
(3) if表示僅當屬性設置時才運行。
(4) unless表示當屬性沒有設置時才運行。
(5) description表示項目的描寫敘述。
Ant的depends屬性指定了target的運行順序。Ant會按照depends屬性中target出現順序依次運行每個target。
在運行以前,首先需要運行它所依賴的target。這裏的依賴有點像java中的方法調用。請讀者自行理解。
演示樣例:
<target name="compile"> <mkdir dir="classes" /> </target> <target name="jar" depends="compile"> <mkdir dir="dist"/> </target>
演示樣例中。名爲jar的target依賴於名爲compile的target。
當在命令行運行「ant jar」時。會先運行compile這個target,因而會在當前目錄先生成classes目錄。在生成dist目錄
該標籤用於建立一個文件夾,它有一個屬性dir用來指定所建立的文件夾名。
使用方法見第二節
(1) destfile表示JAR文件名稱。
(2) basedir表示被歸檔的文件名稱。
(3) includes表示被歸檔的文件模式。
(4) exchudes表示被排除的文件模式。
演示樣例:
<jar jarfile="./dist/test.jar"> <fileset dir="classes" includes="com/wk/**/*.class"> <or> <none> <filename name="com/wk/eai/cups/**/*.class"/> </none> </or> </fileset> </jar>上面的腳本表示:在dist文件夾下生成一個test.jat包。它包括的class文件來自於
com/wk/**/*.class但是會忽略
com/wk/eai/cups/**/*.class這個包下的所有class文件
(3).include表示被編譯的文件的模式。
(4).excludes表示被排除的文件的模式。
(5).classpath表示所使用的類路徑。
(6).debug表示包括的調試信息。
(7).optimize表示是否使用優化。
(8).verbose 表示提供具體的輸出信息。
(9).fileonerror表示當碰到錯誤就本身主動中止。
演示樣例:
<javac fork="true" executable="C:\Program Files\Java\jdk1.5.0\bin\javac" srcdir="src" destdir="classes" debug="true"> <compilerarg value="-Xlint"/> <classpath refid="classpath"/> <fileset id="src.path" dir="src"> <include name="b/*.java"/> <exclude name="b/a/*.java"/> </fileset> </javac>上面的腳本表示將src文件夾下的源文件編譯成class文件到classes文件夾中。編譯時用到的jar包來自於classpath所指定的文件夾。編譯時的java版本號是1.5。同一時候還會將b文件夾中的java文件編譯,但是會忽略b/a文件夾下的java文件,即b/a文件夾下的java文件不會被編譯。
(1).classname 表示將運行的類名。
(2).jar表示包括該類的JAR文件名稱。
(3).classpath所表示用到的類路徑。
(4).fork表示在一個新的虛擬機中執行該類。
(5).failonerror表示當出現錯誤時本身主動中止。
(6).output 表示輸出文件。
(7).append表示追加或者覆蓋默認文件。
(3).includeEmptyDirs 表示指定是否要刪除空文件夾,默認值是刪除。
(4).failonerror 表示指定當碰到錯誤是否中止,默認值是本身主動中止。
(5).verbose表示指定是否列出所刪除的文件,默認值爲不列出。
演示樣例:
<target name="clean" description="清除Build"> <delete dir="classes"/> <delete dir="dist" /> </target>上面的演示樣例表示:運行腳本「ant clean」時,會刪除classes和dist這兩個目錄。
通常在初始化項目時結合init使用
(4).overwrite 表示指定是否覆蓋目標文件,默認值是不覆蓋。
(5).includeEmptyDirs 表示制定是否拷貝空文件夾,默認值爲拷貝。
(6).failonerror 表示指定如目標沒有發現是否本身主動中止。默認值是中止。
(7).verbose 表示制定是否顯示具體信息。默認值不顯示。
演示樣例:
<copy todir="classes"> <fileset dir="src"> <exclude name="**/*.java" /> <exclude name="**/.*" /> <or> <none> <filename name="com/wk/eai/ws/**/*.java"/> </none> </or> </fileset> </copy>表示將src文件夾下的文件拷貝到classes文件夾中。複製是忽略
com/wk/eai/ws/**/*.java文件夾下的java文件
如下簡介構建文件裏一些常用的數據類型。
(1).values 是一個命令參數。
假設參數種有空格,但又想將它做爲單獨一個值。則使用此屬性。
(2).file表示一個參數的文件名稱。在構建文件裏,此文件名稱相對於當前的工做文件夾。
(3).line表示用空格分隔的多個參數列表。
(4).path表示路徑。
(1).file表示環境變量值得文件名稱。此文件名稱要被轉換位一個絕對路徑。
(2).path表示環境變量的路徑。Ant會將它轉換爲一個本地約定。
(3).value 表示環境變量的一個直接變量。
(4).key 表示環境變量名。
注意 file path 或 value僅僅能取一個。
Filelist 是一個支持命名的文件列表的數據類型,包括在一個filelist類型中的文件不必定是存在的文件。下面是其所有的屬性。
(1).dir是用於計算絕對文件名稱的文件夾。
(2).files 是用逗號分隔的文件名稱列表。
(3).refid 是對某處定義的一個<filelist>的引用。
注意 dir 和 files 都是必要的,除非指定了refid(這樣的狀況下,dir和files都不一樣意使用)。
只是,不少ant任務構建成了隱式的fileset,這說明他們支持所有的fileset屬性和嵌套元素。
下面爲fileset 的屬性列表。
(1).dir表示fileset 的基文件夾。
(2).casesensitive的值假設爲false,那麼匹配文件名稱時,fileset不是區分大寫和小寫的,其默認值爲true。
(3).defaultexcludes 用來肯定是否使用默認的排除模式,默以爲true。
(4).excludes 是用逗號分隔的需要派出的文件模式列表。
(5).excludesfile 表示每行包括一個排除模式的文件的文件名稱。
(6).includes 是用逗號分隔的,需要包括的文件模式列表。
(7).includesfile 表示每行包括一個包括模式的文件名稱。
(3).path表示一個文件或路徑名列表。
參考:
http://blog.csdn.net/witsmakemen/article/details/7929761
http://neoman.iteye.com/blog/571806