Ant的優勢 Ant是Apache軟件基金會JAKARTA目錄中的一個子項目,它有如下的優勢。跨平臺性。Ant是存Java語言編寫的,所示具備很好的跨平臺性。操做簡單。Ant是由一個內置任務和可選任務組成的。Ant運行時須要一個XML文件(構建文件)。Ant經過調用target樹,就能夠執行各類task。每一個task實現了特定接口對象。因爲Ant構建文件時XML格式的文件,因此和容易維護和書寫,並且結構很清晰。Ant能夠集成到開發環境中。因爲Ant的跨平臺性和操做簡單的特色,它很容易集成到一些開發環境中去。 Ant 開發Ant的構建文件當開始一個新的項目時,首先應該編寫Ant構建文件。構建文件定義了構建過程,並被團隊開發中每一個人使用。Ant構建文件默認命名爲build.xml,也能夠取其餘的名字。只不過在運行的時候把這個命名看成參數傳給Ant。構建文件能夠放在任何的位置。通常作法是放在項目頂層目錄中,這樣能夠保持項目的簡潔和清晰。下面是一個典型的項目層次結構。 (1) src存放文件。 (2) class存放編譯後的文件。 (3) lib存放第三方JAR包。 (4) dist存放打包,發佈之後的代碼。 Ant構建文件是XML文件。每一個構建文件定義一個惟一的項目(Project元素)。每一個項目下能夠定義不少目標(target元素),這些目標之間能夠有依賴關係。當執行這類目標時,須要執行他們所依賴的目標。每一個目標中能夠定義多個任務,目標中還定義了所要執行的任務序列。Ant在構建目標時必須調用所定義的任務。任務定義了Ant實際執行的命令。Ant中的任務能夠爲3類。 (1) 核心任務。核心任務是Ant自帶的任務。 (2) 可選任務。可選任務實來自第三方的任務,所以須要一個附加的JAR文件。 (3) 用戶自定義的任務。用戶自定義的任務實用戶本身開發的任務。 在有eclipse集成環境下ant其實不是很重要,但有些項目須要用到,另外經過eclipse來學習和理解ant是個很好的途徑,因此寫他demo總結下要點,但願可以幫到你們。 1、本人測試環境eclipse3.6已自動集成了ant環境, 因此就不用單獨下載配置ant環境了。 若是沒有eclipse集成環境能夠本身下載ant http://www.apache.org/ 下載最新的版本 解壓ant 後設置ANT_HOME, PATH中添加ANT_HOME目錄下的bin目錄(如:ANT_HOME:D:\apache-ant-1.9.2,PATH:%ANT_HOME%\bin) 測試方法:開始-->運行-->cmd進入命令行-->鍵入 ant 回車,若是看到 Buildfile: build.xml does not exist! Build failed 說明已經完成ant的設置。 2、體驗ant 就像每一個語言都有HelloWorld同樣,一個最簡單的應用能讓人感覺一下Ant 1. 首先你要知道你要幹什麼,我如今想作的事情是: 編寫一些程序->編譯它們->把它打包成jar包->把他們放在應該放置的地方->運行它們 這裏爲了簡單起見只寫一個程序以下: [java] view plain copy 在CODE上查看代碼片派生到個人代碼片 package test; /** * @author mijing * @version 2016年3月23日 上午10:24:59 */ public class Test1 { public static void main(String[] args){ System.out.println("hello"); } } 2. 爲了達到上邊的目的,你能夠手動的用javac 、copy 、jar、java來完成,可是考慮一下若是你有成百上千個類,在屢次調試,部署的時候,一次次的javac 、copy、jar、java那將是一份辛苦的工做。如今看看ant怎麼優雅的完成它們。 要運行ant須要有一個build.xml雖然不必定要叫這個名字,可是建議你這麼作 下邊就是一個完整的build.xml,而後咱們來詳細的解釋每一句 [java] view plain copy 在CODE上查看代碼片派生到個人代碼片 <?xml version="1.0" encoding="UTF-8"?> <project name="testForAnt" default="run" basedir="."> <!--properities--> <property name="src.dir" value="src"/> <property name="report.dir" value="report" /> <property name="classes.dir" value="classes" /> <property name="lib.dir" value="lib"/> <property name="dest.dir" value="dest" /> <property name="test_jar" value="test1.jar"/> <!--定義classpath--> <path id="master-classpath"> <fileset file="${lib.dir}/*.jar" /> <pathelement path="${classes.dir}"/> </path> <!--初始化任務--> <target name="init"> <mkdir dir="${dest.dir}"/> </target> <!--編譯--> <target name="compile" depends="init" description="compile the source files"> <mkdir dir="${classes.dir}"/> <javac srcdir="${src.dir}" destdir="${classes.dir}" > <classpath refid="master-classpath"/> </javac> </target> <!--測試--> <target name="test" depends="compile" description="run junit test"> <mkdir dir="${report.dir}"/> </target> <!--打包成jar--> <target name="build" depends="compile"> <jar jarfile="${dest.dir}/${test_jar}" basedir="${classes.dir}"> </jar> </target> <!-- <target name="pack" depends="compile" description="make .jar file"> <jar destfile="${dest.dir}/test1.jar" basedir="${classes.dir}"> </jar> </target>--> <target name="run" depends="build"> <java classname="test.Test1" classpath="${dest.dir}/${test_jar}"/> </target> <target name="clean" > <delete dir="${test.dir}" /> </target> <target name="rerun" depends="clean,run"> <ant target="clean" /> <ant target="run" /> </target> </project> 解釋: <?xml version="1.0" encoding="UTF-8" ?> build.xml中的第一句話,沒有實際的意義 <project name="testForAnt" default="run" basedir="."> </project> ant的全部內容必須包含在這個裏邊,name是你給它取的名字,即工程名字,basedir顧名思意就是工做的根目錄。.表明當前目錄。default表明默認要作的事情。 <!--properities--> <property name="src.dir" value="src"/> <property name="report.dir" value="report" /> <property name="classes.dir" value="classes" /> <property name="lib.dir" value="lib"/> <property name="dest.dir" value="dest" /> <property name="test_jar" value="test1.jar"/> 相似於程序中的全局變量,這樣在下面若是屢次使用某個值時,直接引用name變量名便可,在以後的修改中,也只須要修改此處的value便可。在後面的使用中,只須要使用"${name}"便可使用對應的變量。 <!--初始化任務--> <target name="init"> <mkdir dir="${dest.dir}"/> </target> 把你想作的每一件事情寫成一個target ,它有一個名字,depends是它所依賴的target,若與多個target存在依賴關係時,須要以「,」間隔。Ant會依照depends屬性中target出現的順序依次執行每一個target。被依賴的target會先執行。例如在本build.xml文件中,在執行這個target(例如這裏的compile)以前ant會先檢查init是否曾經被執行過,若是執行過則直接執行compile,若是沒有則會先執行它依賴的target例如這裏的init,而後在執行這個target 如咱們的計劃 <!--編譯--> <target name="compile" depends="init" description="compile the source files"> <mkdir dir="${classes.dir}"/> <javac srcdir="${src.dir}" destdir="${classes.dir}" > <classpath refid="master-classpath"/> </javac> </target> <!--測試--> <target name="test" depends="compile" description="run junit test"> <mkdir dir="${report.dir}"/> </target> <!--打包成jar--> <target name="build" depends="compile"> <jar jarfile="${dest.dir}/${test_jar}" basedir="${classes.dir}"> </jar> </target> <!-- <target name="pack" depends="compile" description="make .jar file"> <jar destfile="${dest.dir}/test1.jar" basedir="${classes.dir}"> </jar> </target>--> <!--運行--> <target name="run" depends="build"> <Java classname="test.Test1" classpath="${dest.dir}/${test_jar}"/> </target> 爲了避免用拷貝,咱們能夠在最開始定義好目標文件夾,這樣ant直接把結果就放在目標文件夾中了 ,即在打包的target爲build時,jarfile記爲要存儲的jar包路徑和名稱,basedir爲class文件的位置 爲了更多一點的功能體現,又加入了兩個target 刪除生成的文件 <target name="clean" > <delete dir="${test.dir}" /> </target> 再次運行,這裏顯示瞭如何在一個target裏邊調用其餘的target <target name="rerun" depends="clean,run"> <ant target="clean" /> <ant target="run" /> </target> 在eclipse中使用時,右鍵build.xml文件,選擇Run as -->Ant Build便可。 運行結果以下所示: 對於上述警告warning: 'includeantruntime' was not set,只須要在target爲compile處加上includeantruntime="on" ,即以下: <target name="compile" depends="init" description="compile the source files"> <mkdir dir="${classes.dir}"/> <javac srcdir="${src.dir}" destdir="${classes.dir}" includeantruntime="on"> <classpath refid="master-classpath"/> </javac> </target> 在命令行使用ant時,鍵入ant ,你會發現一個個任務都完成了。每次更改完代碼只須要再次鍵入ant。 有的時候咱們可能並不想運行程序,只想執行這些步驟中的某一兩個步驟,例如我只想從新部署而不想運行,鍵入 ant build ant中的每個任務均可以這樣調用ant + target name 好了,這樣一個簡單的ant任務完成了。