轉載請注明原文地址:http://www.cnblogs.com/ygj0930/p/6624003.html
一:Ant是什么
Ant相當於Linux環境下的shell腳本,只不過是用xml文檔來編寫的。我們知道,在linux環境中,可以通過編寫shell腳本,封裝一系列繁瑣而日常需要經常重復的操作。在需要進行這些操作時,只需運行這個腳本就可以批處理這些操作了。Ant腳本也是一樣,只不過它一般是為了方便Java項目的編譯、運行、測試、打包等工作服務的。
我們知道,日常開發工作中,一個項目除了編碼外,還需單元測試、集成測試、系統測試,測試過程中可能會不斷修改代碼,然后再測試。這樣重復而繁瑣的過程是十分耗時間的。在程序編譯、測試通過后,還需要打包導出,如果之后需要改變了代碼,那么這些工作又要重新再做。Ant的產生,就是為了把我們從這些重復而瑣碎的工作中解放出來。
二:Ant能干什么
Ant腳本,通過一個xml文件來制定一系列文件的創建刪除任務、編譯任務、運行任務、測試任務、打包任務等。我們可以通過ant指令執行這個xml腳本,來批處理這些任務,這樣就可以實現“一鍵”完成編碼后的編譯、運行、測試、打包導出等工作,使我們可以更加專注於代碼的編寫與質量。
三:Ant的使用
1:安裝配置
下載地址:http://ant.apache.org/
安裝:解壓得到 apache-ant文件夾,這個就是Ant的安裝目錄了,復制到你想安置的地方即可。
配置:與設置Java運行環境類型:在系統環境變量中添加:ANT_HOME= XX:\XX\apache-ant (apache-ant所在路徑)
在Path環境變量值后面加上:XX:\XX\apache-ant\bin (apache-ant\bin所在路徑)
打開cmd,輸入 ant ,如果出現以下結果則說明Ant配置成功:
2:編寫Ant腳本
一個Ant腳本即可完成至少一個項目的編譯、運行、測試、打包等工作。Ant腳本同一命名:build.xml
腳本內容:
1)project 節點:一個腳本相當於一個project,用一個project來統領腳本中的眾多操作命令。用這個project對象來指向腳本本身的基本屬性。
project 元素是 Ant 構件文件的根元素, Ant 構件文件至少應該包含一個 project 元素,否則會發生錯誤。
● name 屬性:用於指定 project 元素的名稱。
● default 屬性:用於指定 project 默認執行時所執行的 target 的名稱。
● basedir 屬性:用於指定基路徑的位置。該屬性沒有指定時,使用 build.xml的目錄作為基准目錄。
2)property節點:屬性節點,相當於Ant腳本中的變量,通過屬性值來攜帶具體內容。在每個任務中通過 ${屬性名} 訪問其屬性值,從而獲取內容。
Ant 提供了一些內置的屬性,它能得到的系統屬性的列表與 Java 文檔中 System.getProperties() 方法得到的屬性一致。Ant 還提供了一些它自己的內置屬性:
basedir: project 基目錄的絕對路徑;
ant.file: buildfile的絕對路徑;
ant.version: Ant 的版本信息;
ant.project.name: 當前指定的project的名字;
ant.java.version: Ant 檢測到的JDK版本 。
3)target節點:任務節點。一個target可以制定一個或內嵌更多任務。
target為ant的基本執行單元,它可以包含一個或多個具體的單元/任務。多個target 可以存在相互依賴關系,target的執行順序可以有兩種方式控制:一種是依賴,depends屬性,AdependsB,則B先執行;另一種就是內嵌:在target A中通過 <ant target="B">命令執行B任務。
● name 屬性:指定 target 元素的名稱,這個屬性在一個 project 元素中是唯一的。我們可以通過指定 target 元素的名稱來指定某個 target 。
● depends 屬性:用於描述 target 之間的依賴關系,Ant 會依照 depends 屬性中 target 出現的順序依次執行每個 target ,被依賴的target 會先執行。
● if 屬性:用於驗證指定的屬性是存在,若存在,所在 target 才會被執行。
● unless 屬性:該屬性的功能與 if 屬性的功能正好相反,若不存在,所在 target 將會被執行。
● description 屬性:該屬性是關於 target 功能的簡短描述和說明。
4)copy命令
copy主要用來對文件和目錄的復制功能。
5)delete命令
對文件或目錄進行刪除。
6) mkdir 命令
創建目錄。
7)move 命令
移動文件或目錄,
8)echo 命令
在控制台輸出信息。它包括 message 、 file 、 append 和 level 四個屬性。
9)jar 命令標簽:打包成jar包並導出
● destfile:打包導出的JAR路徑名,即:導出jar包到哪里。
● basedir:被打包的文件,一般是編譯通過的文件。
● includes表示被歸檔的文件類型。
● exchudes表示被排除的文件類型。
● compress表示是否壓縮。
(打包命令標簽還有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 參數標簽:可以用於定義測試用例,向運行程序進行輸入,觀察輸出
通過<arg>元素向其傳遞命令行參數。
● values 是一個命令參數。
● file 表示一個參數的文件名。
● line 表示用空格分隔的多個參數列表。
● pathref 引用的path(使用path元素節點定義path)的id
● prefix 前綴
● suffix 后綴
13)path節點:表示一個路徑
path元素用來表示一個類路徑,不過它還可以用於表示其他的路徑。
● location 表示一個文件或目錄。Ant在內部將此擴展為一個絕對路徑。
● refid 是對當前構建文件中某處定義的一個path的引用。
● path表示一個文件或路徑名列表。
3:腳本基本結構解析
<?xml version="1.0" encoding="UTF-8"?> <!--創建project--> <project default="默認執行的target" basedir="."> <!--創建屬性標簽:攜帶數據,在下面的target中使用--> <property name="XX" XX="xx" /> <!--創建任務--> <target name="任務名" depends="依賴哪個任務"> <命令標簽 屬性=“屬性值:指明命令執行的具體內容”/> </target> </project>
4:執行腳本