http://blog.csdn.net/yubo_725/article/details/52326746html
1、什麼是Ant
如下介紹來自百度百科:
Apache Ant,是一個將軟件編譯、測試、部署等步驟聯繫在一塊兒加以自動化的一個工具,大多用於Java環境中的軟件開發。由Apache軟件基金會所提供。
咱們在使用Eclipse開發Android應用時,Eclipse使用的項目構建工具就是Ant。
用戶羣:大多數的Java設計都被用於管理大量信息流,例如紐約州就使用Apache Ant去管理美國最大的青年計劃,天天能夠實時更新超過25萬學生的記錄。
只要使用過Linux系統的讀者,應該知道 make這個命令。當編譯Linux內核及一些軟件的源程序時,常常要用這個命令。Make命令其實就 是一個項目管理工具,而Ant所實現功能與此相似。像make,gnumake和nmake這些編譯工具都有 必定的缺陷,可是Ant卻克服了這些工具的缺陷。最初Ant開發者在開發跨平臺的應用時,一樣也 是基於這些缺陷對Ant作了更好的設計。
2、Ant的優勢
Ant是Apache軟件基金會JAKARTA目錄中的一個子項目,它有如下的優勢:
跨平臺性。Ant是純Java語言編寫的,因此具備很好的跨平臺性。
操做簡單。Ant是由一個內置任務和可選任務組成的。Ant運行時須要一個XML文件(構建文件)。 Ant經過調用target樹,就能夠執行各類task。每一個task實現了特定接口對象。因爲Ant構建文件 是XML格式的文件,因此很容易維護和書寫,並且結構很清晰。Ant能夠集成到開發環境中。因爲Ant的跨平臺性和操做簡單的特色,它很容易集成到一些開發環 境中去。
3、Ant的基本使用方法
下面介紹Ant的基本使用方法:
二、下載後的壓縮文件直接解壓後放到硬盤的目錄下就行,而後是配置Ant的環境變量,由於咱們須要在命令行下使用ant命令,因此須要將ant的目錄加入path環境變量中,步驟以下(windows10系統):
(1)鼠標右擊桌面「此電腦」,選擇屬性,而後在出現的窗口左側選擇「高級系統設置」,在彈出的窗口中選擇「環境變量」
(2)在環境變量配置窗口中的「用戶變量」中新增一個變量名爲ANT_HOME,值爲Ant解壓後的目錄,以下圖所示:
而後在「用戶變量」下找PATH變量,若是沒有就新增一個PATH變量,若是有就直接在PATH變量中加入新的值,值爲「%ANT_HOME%\bin」
通過上面2步就配置好了Ant的環境變量了,cmd中執行ant -version命令後,以下圖所示則表示配置成功:
三、開始使用Ant。
Ant的核心就是配置文件build.xml,在build.xml文件中配置相關的任務後,使用ant命令便可自動執行,因此咱們須要掌握ant的相關配置,這裏先在桌面新建一個目錄TestAnt,而後進入該目錄,新建一個build.xml文件,並加入以下內容:
- <?xml version="1.0"?>
- <project name="HelloWorld" default="test" basedir="">
- <target name="test">
- <echo message="test echo messsage, basedir=${basedir}" />
- </target>
- </project>
在命令行下咱們進入上面build.xml所在的目錄,而後執行ant命令,會出現以下圖所示的結果:
下面就來解釋上面的build.xml文件的配置:
(1)build.xml須要遵循必定的格式,這樣ant命令才能正確執行,一個build.xml文件是以<project>標籤爲根節點的,<project>節點中能夠指定name屬性,表示項目的名稱,basedir表明項目的根目錄,default表示項目的默認任務名,這裏的default屬性值爲test,則執行ant命令時會找default對應的target去執行(若是ant命令沒有指定任務名的話)。
(2)<project>標籤中定義了一個<target>標籤,該標籤表示的就是一個任務,<target>標籤中的name屬性表示任務名,咱們能夠在命令行下直接使用ant + 任務名來執行某個特定的任務,例如上面的例子中,咱們可使用ant test命令去執行name值爲test的target任務,因爲咱們在<project>標籤中配置了default屬性爲test,因此在命令行下只須要執行ant命令就能夠運行test任務了。
(3)<echo>標籤表示在命令行下輸出,相似於java中的System.out.println(),在<echo>標籤中配置message屬性後便可在命令行下打印該屬性的值。如上圖中顯示的[echo],即爲咱們配置的message屬性的值。
(4)使用${}能夠獲取某個變量的值,花括號中爲變量名,如上圖中打印出的C:\Users\yubo7\Desktop\TestAnt,即爲basedir的值,因爲在<project>標籤中咱們給basedir屬性的值爲空,因此basedir的值默認爲build.xml所在的路徑。
上面的例子是一個最基本的build.xml文件的結構,build.xml文件還有不少配置項,下面舉例幾個配置項:
<property>標籤,用於聲明鍵值對:
- <?xml version="1.0"?>
- <project name="HelloWorld" default="test" basedir="">
- <target name="test-property">
- <property name="name" value="zhangsan" />
- <property name="age" value="25" />
- <echo message="this is target test2." />
- <echo message="java version: ${ant.java.version}" />
- <echo message="project name: ${ant.project.name}" />
- <echo message="ant file: ${ant.file}" />
- <echo message="name = ${name}, age = ${age}" />
- </target>
- </project>
執行ant test-property命令後,結果以下圖:
<property>標籤用於聲明一個屬性,其中name爲屬性名,value爲屬性值,訪問屬性值時使用${屬性名}。
<copty>標籤,用於文件拷貝:
- <?xml version="1.0"?>
- <project name="HelloWorld" default="test" basedir="">
- <target name="test-copy">
- <copy file="test.txt" tofile="build/test.txt" />
- </target>
- </project>
執行ant test-copy命令後,結果以下圖所示:
<copy>標籤表示文件或文件夾的拷貝,上面的配置中,file屬性表示要拷貝的文件路徑,tofile屬性表示要拷貝的目的文件路徑。若是待拷貝的文件不存在,則命令執行會失敗,若是目的文件路徑不存在,則命令執行時會自動建立目錄。若是是要拷貝整個目錄,須要下面的配置:
- <?xml version="1.0"?>
- <project name="HelloWorld" default="test" basedir="">
- <target name="test-copy-dir">
- <copy todir="build/dest_dir">
- <fileset dir="origin_dir" />
- </copy>
- </target>
- </project>
執行ant test-copy-dir命令後,結果以下圖所示:
和單個文件的拷貝相似,若是待拷貝的目錄不存在,則命令執行會失敗,若是目的路徑不存在,則命令執行時會自動建立目錄。
<delete>標籤,用於文件或文件夾的刪除:
- <?xml version="1.0"?>
- <project name="HelloWorld" default="test" basedir="">
-
- <target name="test-del-file">
- <delete file="test.txt" />
- </target>
-
-
- <target name="test-del-dir">
- <delete dir="origin_dir" />
- </target>
- </project>
執行ant test-del-file和ant test-del-dir命令後,結果以下圖所示:
<mkdir>標籤,用於目錄的建立:
- <?xml version="1.0"?>
- <project name="HelloWorld" default="test" basedir="">
- <target name="test-mkdir">
- <mkdir dir="test" />
- </target>
- </project>
執行ant test-mkdir命令後,結果以下圖:
執行成功後在項目的目錄下出現了test目錄。
上面的幾種是ant操做文件的基本用法,可是ant的用法不只僅只有這麼簡單而已,ant還能夠編譯java文件,用法以下:
<javac>標籤,用於將.java文件編譯成.class文件:
- <?xml version="1.0"?>
- <project name="HelloWorld" default="test" basedir="">
- <target name="test-compile">
- <javac srcdir="src" destdir="build/classes/" />
- </target>
- </project>
srcdir指定了java源文件所在的路徑,destdir指定的是編譯後的class文件存放的路徑,這裏作一個簡單的測試,咱們在src目錄下新建一個Test.java文件,內容爲以下代碼:
- public class Test {
- public static void main(String[] args) {
- System.out.println("HelloWorld!");
- }
- }
而後執行ant test-compile命令,結果以下圖:
第一次執行ant test-compile命令時,因爲destdir目錄不存在,因此編譯不成功,在建立了build/classes/目錄後再次執行ant test-compile,命令執行成功,而且在build/classes/目錄下出現了Test.class文件。
ant能編譯java文件,天然也能運行java程序,用法以下:
<java>標籤,用於執行.class文件:
- <?xml version="1.0"?>
- <project name="HelloWorld" default="test" basedir="">
- <target name="test-run-java">
- <java classname="Test">
- <classpath>
- <pathelement path="build/classes" />
- </classpath>
- </java>
- </target>
- </project>
<java>標籤中的classname屬性,指定了要執行的main class名,<classpath>標籤中的<pathelement>標籤,指定了class文件的路徑。
執行ant test-run-java命令後,結果以下圖:
能夠看到控制檯中打印了HelloWorld!,和咱們在代碼中打印的同樣,證實這裏執行了java代碼。
<jar>標籤,用於將java程序打包成jar文件:
- <?xml version="1.0"?>
- <project name="add" default="jar">
- <target name="jar">
- <jar destfile="add.jar" basedir="build/classes/">
- <manifest>
- <attribute name="Main-class" value="Add" />
- </manifest>
- </jar>
- </target>
- </project>
<jar>標籤中的destfile屬性表示要生成的jar文件,basedir指定class文件的路徑,<manifest>標籤指定了jar包中的MANIFEST.MF文件中的屬性,裏面配置Main-class,即主class名稱爲"Add"。
任務依賴:
使用ant執行任務時,咱們確定不會是一個個的執行,有時候會經過一次命令執行多個任務,好比下面的過程:
新建目錄->移動文件到該目錄->刪除原來的文件
這個過程實際上是3個獨立的任務,爲了一次執行這3個任務,須要用到<target>標籤中的depends屬性,首先上代碼:
- <?xml version="1.0"?>
- <project name="Test" default="delete-file">
-
- <target name="mkdir">
- <mkdir dir="build/dest" />
- </target>
-
-
- <target name="copy-file" depends="mkdir">
- <copy file="test.txt" tofile="build/dest/test.txt" />
- </target>
-
-
- <target name="delete-file" depends="copy-file">
- <delete file="test.txt" />
- </target>
- </project>
上面的配置文件中有三個任務,其中copy-file任務和delete-file任務中都含有depends屬性,該屬性表示執行<target>中的任務時,要依賴depends中指定的任務(depends中指定的任務會先執行),depends屬性值就是一個任務名,因此上面的配置文件表示:執行delete-file任務時須要依賴copy-file任務,而執行copy-file任務時須要依賴mkdir任務,<project>標籤中的default值爲delete-file,則咱們執行ant命令時,會找到delete-file任務,可是這個任務又依賴別的任務,則被依賴的任務會先執行,因此上面的配置文件執行的順序爲:mkdir-->copy-file-->delete-file。
以上就是ant的基本用法,下一篇中會記錄Eclipse使用ant構建項目時,執行任務的過程。