Ant的使用 什麼是Apache Ant Apache Ant是一個基於java的軟體構建工具(build tool),理論上它有點類似C/C++的make工具 為什麼要用ant? make, gnumake, nmake, jam或其他已有的構建工具里,為什麼還需要單獨搞這個ant工具呢? 因為前 ...
Ant的使用
什麼是Apache Ant
Apache Ant是一個基於java的軟體構建工具(build tool),理論上它有點類似C/C++的make工具
為什麼要用ant?
make, gnumake, nmake, jam或其他已有的構建工具里,為什麼還需要單獨搞這個ant工具呢?
因為前面的這些構建工具都有局限性,Ant的原創作者在開發跨多個平臺的軟體時無法忍受。
- make工具本質上是基於shell: make會評估一些系統依賴,然後才能執行命令。這意味著你可以輕鬆地使用或編寫您正在處理的操作系統的任何程式來擴展這些構建工具。但是,這也意味著你將自己限制在操作系統上,或者至少是Unix類的操作系統類型。
- makefile工具本身也是很討厭的,任何一個曾經用makefile工作的人都會遇到麻煩的tab問題。“由於我在tab前面加了一個空格導致我的命令行總不湊效”,Ant的原創作者說了太多遍了。像Jam這樣的工具在很大程度上處理了這個問題,但是仍然要使用和記住它的一些格式。
而Ant是不同的,Ant使用Java類擴展,而不是使用基於shell命令擴展。與編寫shell命令不同,配置文件是基於xml的,調用一個目標樹來執行各種任務。每個任務由實現特定任務介面的Java對象運行。
Ant去掉了一些shell命令(比如find . -name foo -exec rm {}
)的功能,但它提供了類似的功能,一個跨平臺(work anywhere and everywhere)的能力。如果你真的需要執行這些shell命令,Ant有一個<exec>
任務允許根據正在執行的操作系統執行不同的命令。
說白了,Ant工具為瞭解決跨平臺問題。
使用Apache Ant
編寫一個簡單的構建文件
Apache Ant的構建文件是用build.xml編寫的。
每個構建文件包含一個項目(project)和至少一個預設目標(target)。目標包含任務(task)。
Projects
一個project包含下麵3個屬性
屬性 | 描述 |
---|---|
name | 項目名稱 |
default | 在不提供目標時使用的預設目標 |
basedir | 完成所有路徑計算的基本目錄。 這個屬性可能會被預先設置“basedir”屬性覆蓋。 如果該屬性和屬性值都沒有設置,則將使用構建文件build.xml所在的目錄路徑。 |
可選地,項目的描述可以由頂級的<description>
元素提供。
每個項目定義一個或多個目標。目標是您想要執行的一組任務。當啟動Ant時,可以選擇要執行的目標。當沒有目標時,項目的預設值default被使用。
Targets
一個目標可以依賴於另外目標,使用depends屬性。
例如,您可能有一個用於編譯的目標,和一個發佈的目標。當你執行發佈的目標時不得不先執行編譯的目標,所以發佈目標取決於編譯目標。應該註意的是,Ant的depends屬性, 如果它依賴的目標沒有執行,而是直接執行當前目標,它也會自動去執行依賴的目標。
Tasks
任務是可以執行的一段代碼。 一個任務可以有多個屬性(或者參數,如果你喜歡的話)。
屬性的值可能包含對屬性的引用。這些引用將在任務執行之前解析。
任務有一個共同的結構: <name attribute1="value1" attribute2="value2" ... />
name就是任務的名稱,attributeN是屬性名,valueN是該屬性的值。
所有任務共用一個任務名屬性。該屬性的值將用於Ant生成的日誌消息。
Properties