Java自動化工具Ant的基礎使用教程
Ant 是什么?
Apache Ant 是一個基于Java 的生成工具。據(jù)最初的創(chuàng)始人 James Duncan Davidson 介紹,這個工具的名稱是 another neat tool(另一個整潔的工具) 的首字母縮寫。
Ant的作用:
生成工具在軟件開發(fā)中用來將源代碼和其他輸入文件轉換為可執(zhí)行文件的形式(也有可能轉換為可安裝的產(chǎn)品映像形式)。隨著應用程序的生成過程變得更加復雜,確保在每次生成期間都使用精確相同的生成步驟,同時實現(xiàn)盡可能多的自動化,以便及時產(chǎn)生一致的生成版本,這就變得更加重要.
Ant的優(yōu)勢:
Ant是一種基于Java的build工具。理論上來說,它有些類似于(Unix)C中的make ,但沒有make的缺陷。目前的最新版本為:Ant 1.8.4?! 〖热晃覀円呀?jīng)有了make, gnumake, nmake, jam以及其他的build工具為什么還要要一種新的build工具呢?因為Ant的原作者在多種(硬件)平臺上開發(fā)軟件時,無法忍受這些工具的限制和不便。類似于make的工具本質上是基于shell(語言)的:他們計算依賴關系,然后執(zhí)行命令(這些命令與你在命令行敲的命令沒太大區(qū)別)。這就意味著你可以很容易地通過使用OS特有的或編寫新的(命令)程序擴展該工具;然而,這也意味著你將自己限制在了特定的OS,或特定的OS類型上,如Unix.
Ant就不同了。與基于shell命令的擴展模式不同,Ant用Java的類來擴展。(用戶)不必編寫shell命令,配置文件是基于XML的,通過調用target樹,就可執(zhí)行各種task。每個task由實現(xiàn)了一個特定Task接口的對象來運行。
Ant 定義生成文件之間的依賴關系,它使用跨平臺的 Java 類。使用 Ant,您能夠編寫單個生成文件,這個生成文件在任何 Java 平臺上都一致地操作(因為 Ant 本身也是使用 Java 語言來實現(xiàn)的),這就是 Ant 最大的優(yōu)勢
Ant生成文件剖析:
Ant 沒有定義它自己的自定義語法;相反,它的生成文件是用 XML 編寫的。存在一組 Ant 能夠理解的預定義 XML 元素,而且還可以定義新的元素來擴展 Ant 的功能。每個生成文件由單個 project 元素組成,該元素又包含一個或多個 target 元素。一個目標(target)是生成過程中已定義的一個步驟,它執(zhí)行任意數(shù)量的操作,比如編譯一組源文件。并且這些操作本身是由其他專用任務標簽執(zhí)行的然后這些任務將根據(jù)需要被分組到各個 target 元素中。一次生成過程所必需的所有操作可以放入單個 target 元素中,但是那樣會降低靈活性。將那些操作劃分為邏輯生成步驟,每個步驟包含在它自己的 target 元素中,這樣通常更為可取。這樣可以執(zhí)行整體生成過程的單獨部分,卻不一定要執(zhí)行其他部分。
例如,通過僅調用某些目標,您可以編譯項目的源代碼,卻不必創(chuàng)建可安裝的項目文件
頂級 project 元素需要包含一個 default 屬性,如果在 Ant 被調用時沒有指定目標,這個屬性將指定要執(zhí)行的目標。然后需要使用 target 元素來定義該目標本身。
下面是一個最基本的生成文件:
<?xml version="1.0"?> <project default="init"> <target name="init"> </target> </project>
Ant基本使用方式:
1. 配置環(huán)境變量:
ANT_HOME: C:\ant-1.8 -----> Ant的安裝/解壓目錄路徑
PATH后追加: C:\ant-1.8\bin ------>Ant中的BIN目錄路徑
2. 確認環(huán)境變量配置是否成功
打開CMD窗口,然后輸入命令: ant:
看到如下顯示:
由于Ant構建時需要默認有build.xml文件,因此有如上的提示,至此,說明Ant的環(huán)境已經(jīng)配置成功.
3. 使用Ant創(chuàng)建一個名為HelloWorld的文件夾:
首先需要編輯build.xml:
<?xml version="1.0"?> <project default="init"> <target name="init"> <span style="color:#FF0000;"><mkdir dir="HelloWorld"></span> </target> </project>
然后切換到build.xml文件所在的目錄,輸入ant,若有如下提示,則創(chuàng)建文件夾成功:
(init 部分相當于 日志的輸出)
4. 也可以使用ant創(chuàng)建多級嵌套的文件目錄
只需要在build.xml文件中進行修改:
<?xml version="1.0"?> <project default="init"> <target name="init"> <span style="color:#FF0000;"> <mkdir dir="HelloWorld\a\b\c"/></span> </target> </project>
5. 刪除如上的多級目錄:
<?xml version="1.0"?> <project default="init"> <target name="init"> <span style="color:#FF0000;"><delete dir="HelloWorld"/></span> </target> </project>
注意:此處路徑只用輸入最高級目錄路徑,這也正是ANT工具的強大之處:
Java中如果要刪除目錄,除非該目錄為空才可以刪除,否則就要逐步進行刪除.
而使用Ant工具,則可以直接刪除含有子目錄的文件夾.
再看一個示例XML文件:
<?xml version="1.0"?> <project default="init" name="Project"> <description> A simple project introducing the use of descriptive tags in Ant build files. </description> <!-- XML comments can also be used --> <target name="init" description="Initialize Argon database"> <!-- perform initialization steps here --> </target> </project>
可以看出,XML 注釋可以使用在整個生成文件中以提高清晰性。而且,Ant 定義了它自己的description 元素和 description 屬性,它們可用于提供更結構化的注釋。
Ant屬性:
Ant 中的屬性類似編程語言中的變量,它們都具有名稱和值。然而與通常的變量不同,一經(jīng)設置,Ant 中的屬性就不可更改;它們是不可變的,就像 Java 語言中的 String 對象。 這起初看來似乎很有限制性,但這樣是為了遵循 Ant 的簡單原則: 畢竟,它是一個生成工具,而不是一種編程語言。如果嘗試給某個現(xiàn)有屬性賦予一個新的值,這不會被看作是一個錯誤,但是該屬性仍然會保留其現(xiàn)有值
定義與使用屬性:
<property name="metal“ value="beryllium"/>
為了在生成文件的其他部分引用這個屬性,使用以下語法:
例如,為了使用這樣一個值,它是另一個屬性的值的組成部分,將標簽寫成下面這樣
<property name="metal-database" value="${metal}.db"/>
location屬性:
屬性經(jīng)常用于引用文件系統(tǒng)上的文件或目錄,但是對于使用不同路徑分隔符(例如,/ 與 \)的平臺來說,這樣可能在跨越不同平臺時導致問題。Ant 的 location 屬性專門設計用于以平臺無關的方式包含文件系統(tǒng)路徑。像下面這樣使用 location 來代替value:
<property name="database-file" location="archive/databases/${metal}.db"/>
用于 location 屬性的路徑分隔字符將被轉換為當前平臺的正確格式;而且由于文件名是相對的,它被認為是相對于項目的基目錄。我們同樣可以容易地寫為下面這樣:
<property name="database-file" location="archive\databases\${metal}.db"/>
這個標簽的兩個版本都會在不同的平臺具有相同的行為.
定義依賴關系:
生成一個項目一般需要許多步驟 —— 例如首先要編譯源代碼,然后將它打包為 Java 歸檔文件
(Java Archive File,JAR)。這其中許多步驟都具有清楚定義的順序 —— 例如,在編譯器從源代碼生成類文件之前,您不能打包類文件。與順序指定 target 所不同的是,Ant 采用一種更靈活的方法來定義 依賴關系 。每個目標的定義依據(jù)的是在它能夠執(zhí)行之前必須完成的其他所有目標。這是使用 target 元素的 depends 屬性來實現(xiàn)的
<target name="init"/> <target name="preprocess" depends="init"/> <target name="compile" depends="init,preprocess"/> <target name="package" depends="compile"/>
這種方法允許您執(zhí)行項目任何階段的生成過程;Ant 會首先執(zhí)行已定義的先決階段。在上面的例子中,如果讓 Ant 完成 compile 步驟,它將判斷出需要首先執(zhí)行 init 和preprocess 這兩個目標。init 目標不依賴其他任何目標,因此它將首先被執(zhí)行。然后 Ant 檢查 preprocesstarget,發(fā)現(xiàn)它依賴 init 目標;由于已經(jīng)執(zhí)行了后者,Ant 不會再次執(zhí)行它,因而開始執(zhí)行 preprocess 目標。最后可以執(zhí)行 compile 任務本身。
注意目標出現(xiàn)在生成文件中的順序并不重要:執(zhí)行順序是由depends 屬性唯一確定的。
相關文章
SpringMvc配置靜態(tài)資源訪問路徑的實現(xiàn)
本文主要介紹了SpringMvc配置靜態(tài)資源訪問路徑的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-07-07Java hashCode原理以及與equals()區(qū)別聯(lián)系詳解
在 Java 應用程序執(zhí)行期間,在同一對象上多次調用 hashCode 方法時,必須一致地返回相同的整數(shù),前提是對象上 equals 比較中所用的信息沒有被修改。從某一應用程序的一次執(zhí)行到同一應用程序的另一次執(zhí)行,該整數(shù)無需保持一致2022-11-11@PathParam和@QueryParam區(qū)別簡析
這篇文章主要介紹了@PathParam和@QueryParam區(qū)別,分享了相關實例代碼,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下2018-01-01Eclipse 項目出現(xiàn)錯誤(紅色嘆號)解決方法
這篇文章主要介紹了Eclipse 項目出現(xiàn)錯誤(紅色嘆號)解決方法的相關資料,需要的朋友可以參考下2017-06-06springboot實現(xiàn)返回視圖而不是string的方法
這篇文章主要介紹了springboot實現(xiàn)返回視圖而不是string的方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01Spring基于ProxyFactoryBean創(chuàng)建AOP代理
這篇文章主要介紹了Spring基于ProxyFactoryBean創(chuàng)建AOP代理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-10-10