生活随笔
收集整理的這篇文章主要介紹了
Apache Ant自动化脚本
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
http://blog.csdn.net/yubo_725/article/details/52326746
一、什么是Ant
以下介紹來自百度百科: Apache Ant,是一個將軟件編譯、測試、部署等步驟聯系在一起加以自動化的一個工具,大多用于Java環境中的軟件開發。由Apache軟件基金會所提供。 我們在使用Eclipse開發Android應用時,Eclipse使用的項目構建工具就是Ant。 用戶群:大多數的Java設計都被用于管理大量信息流,例如紐約州就使用Apache Ant去管理美國最大的青年計劃,每天可以實時更新超過25萬學生的記錄。
只要使用過Linux系統的讀者,應該知道 make這個命令。當編譯Linux內核及一些軟件的源程序時,經常要用這個命令。Make命令其實就 是一個項目管理工具,而Ant所實現功能與此類似。像make,gnumake和nmake這些編譯工具都有 一定的缺陷,但是Ant卻克服了這些工具的缺陷。最初Ant開發者在開發跨平臺的應用時,同樣也 是基于這些缺陷對Ant做了更好的設計。
二、Ant的優點
Ant是Apache軟件基金會JAKARTA目錄中的一個子項目,它有以下的優點: 跨平臺性。Ant是純Java語言編寫的,所以具有很好的跨平臺性。 操作簡單。Ant是由一個內置任務和可選任務組成的。Ant運行時需要一個XML文件(構建文件)。 Ant通過調用target樹,就可以執行各種task。每個task實現了特定接口對象。由于Ant構建文件 是XML格式的文件,所以很容易維護和書寫,而且結構很清晰。Ant可以集成到開發環境中。由于Ant的跨平臺性和操作簡單的特點,它很容易集成到一些開發環 境中去。
三、Ant的基本使用方法
下面介紹Ant的基本使用方法: 1、首先需要從官網下載apache ant,地址為:http://ant.apache.org/bindownload.cgi 2、下載后的壓縮文件直接解壓后放到硬盤的目錄下就行,然后是配置Ant的環境變量,因為我們需要在命令行下使用ant命令,所以需要將ant的目錄加入path環境變量中,步驟如下(windows10系統): (1)鼠標右擊桌面“此電腦”,選擇屬性,然后在出現的窗口左側選擇“高級系統設置”,在彈出的窗口中選擇“環境變量” (2)在環境變量配置窗口中的“用戶變量”中新增一個變量名為ANT_HOME,值為Ant解壓后的目錄,如下圖所示: 然后在“用戶變量”下找PATH變量,如果沒有就新增一個PATH變量,如果有就直接在PATH變量中加入新的值,值為“%ANT_HOME%\bin” 經過上面2步就配置好了Ant的環境變量了,cmd中執行ant -version命令后,如下圖所示則表示配置成功: 3、開始使用Ant。 Ant的核心就是配置文件build.xml,在build.xml文件中配置相關的任務后,使用ant命令即可自動執行,所以我們需要掌握ant的相關配置,這里先在桌面新建一個目錄TestAnt,然后進入該目錄,新建一個build.xml文件,并加入如下內容:
[html]?view plaincopy print?
<?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>標簽,用于聲明鍵值對: [html]?view plaincopy print?
<?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>標簽,用于文件拷貝: [html]?view plaincopy print?
<?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屬性表示要拷貝的目的文件路徑。如果待拷貝的文件不存在,則命令執行會失敗,如果目的文件路徑不存在,則命令執行時會自動創建目錄。如果是要拷貝整個目錄,需要下面的配置:
[html]?view plaincopy print?
<?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>標簽,用于文件或文件夾的刪除: [html]?view plaincopy print?
<?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>標簽,用于目錄的創建: [html]?view plaincopy print?
<?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文件: [html]?view plaincopy print?
<?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文件,內容為如下代碼:
[java]?view plaincopy print?
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文件: [html]?view plaincopy print?
<?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文件: [html]?view plaincopy print?
<?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屬性,首先上代碼:
[html]?view plaincopy print?
<?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的用法可以參考官方文檔:http://ant.apache.org/manual/index.html 以上就是ant的基本用法,下一篇中會記錄Eclipse使用ant構建項目時,執行任務的過程。
轉載于:https://www.cnblogs.com/xlhan/p/7145686.html
總結
以上是生活随笔為你收集整理的Apache Ant自动化脚本的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。