用于Java開發(fā)人員的構(gòu)建工具選擇一直被局限于原有的基于UNIX的工具,例如Make。Make及其開放源代碼的派生工具能夠完成任務(wù),但是正式嚴(yán)肅的工作常常還是要依賴于調(diào)用UNIX或者Windows命令來完成。這就意味著,Java代碼即使能夠做到跨平臺(tái)和編寫一次就能各處使用,構(gòu)建系統(tǒng)一般還是只能依賴于某種特定的平臺(tái)。
Java開發(fā)人員看到了這個(gè)問題,并意識(shí)到:通過提升Java平臺(tái)的功能,他們能夠創(chuàng)建一個(gè)更加強(qiáng)大的構(gòu)建工具,這個(gè)工具是專門為Java程序人員設(shè)計(jì)的,而且不會(huì)依賴于任何特定的平臺(tái)。這就是Ant,一個(gè)由Apache基金會(huì)的Jakarta項(xiàng)目所管理的項(xiàng)目。
Ant的配置文件是用XML文檔編寫的,所以Java程序員應(yīng)該已經(jīng)很熟悉其的語法了,這同Make聲名狼藉的不友好句法形成了鮮明的對比。更重要的是,構(gòu)建系統(tǒng)用來構(gòu)建項(xiàng)目的所有動(dòng)作,也就是任務(wù),也是用Java編寫的;所以同樣的構(gòu)建文件能夠被運(yùn)行在任何可以使用Java編譯器的地方。在Ant里,所有的東西都是獨(dú)立自主的。
在本文里,我們將看到如何安裝Ant,如何創(chuàng)建用于構(gòu)建項(xiàng)目的配置文件,以及如何使用可用的內(nèi)置系統(tǒng)和條件任務(wù)。
要開始的話,我們就需要先去Ant主頁,它上面有最新的發(fā)行版本、在線使用手冊和FAQ。在下載和安裝Ant以前,你需要先安裝Java開發(fā)工具包(1.2或更高版本),需要設(shè)置JAVA_HOME環(huán)境變量,在你的可執(zhí)行路徑里還需要javac編譯器。
你可以從Jakata網(wǎng)站下載預(yù)編譯的ANT。你還要用到可選的Java Archive(JAR)文件,其包含的任務(wù)能有助于與其他開發(fā)工具進(jìn)行集成。Ant也是開放源代碼軟件,所以如果你想修改任何內(nèi)部組件來使其適應(yīng)于自己的開發(fā)環(huán)境,這沒有問題。你要做的只是下載源代碼。但是要注意的是,Ant靈活性極強(qiáng),這一點(diǎn)我們會(huì)在下一篇文章里看到,向Ant添加功能是很容易的,而且不需要更改源代碼。
一旦下載完了二進(jìn)制包,你只需要簡單地把文件解壓到希望安裝Ant的地方。對于Windows系統(tǒng),解壓到c:\ant\;在UNIX系統(tǒng)上,你可能希望安裝到/usr/local/ant/或者/opt/ant/下。
下一步,你需要設(shè)置自己的環(huán)境變量,即ANT_HOME。在Windows上,假如我們安裝到c:\ant目錄下,圖A所示的命令會(huì)正確地設(shè)置你的環(huán)境變量。
圖A
設(shè)置Windows的環(huán)境變量
在UNIX系統(tǒng)上,假設(shè)我們安裝在/usr/local/ant目錄下,圖B所示的命令會(huì)正確地設(shè)置你的環(huán)境變量。
圖B
設(shè)置UNIX的環(huán)境變量
要在Windows或者UNIX系統(tǒng)上安裝可選的任務(wù),你需要把可選的jar文件復(fù)制到$ANT_HOME/lib/目錄下。Ant或者ant.bat腳本會(huì)自動(dòng)地把jar文件追加到類的路徑下。
現(xiàn)在我們測試一下,確信Ant已經(jīng)正確安裝好了。在命令行下,輸入ant。你應(yīng)該會(huì)看到一條信息,見圖C,說Ant無法定位Build.xml文件。這正是我們所期望的,因?yàn)槲覀冞€要配置和創(chuàng)建項(xiàng)目文件。
圖C
創(chuàng)建文件錯(cuò)誤信息
既然Ant已經(jīng)準(zhǔn)備好了讀取項(xiàng)目文件,就讓我們看看項(xiàng)目文件是什么樣的吧。
創(chuàng)建項(xiàng)目 | ||||||
創(chuàng)建項(xiàng)目為了讓開發(fā)人員的日子更加好過一點(diǎn),Ant的配置文件是使用XML文檔編寫的。這樣開發(fā)人員不用去擔(dān)心空白的問題(Makefiles就有這個(gè)問題),而且許多開發(fā)人員都已經(jīng)能夠正確編寫XML了。 Ant一啟動(dòng)就會(huì)自動(dòng)地加載一個(gè)叫做Build.xml的項(xiàng)目配置文件。如果想給這個(gè)項(xiàng)目配置文件取別的名字,你可以使用buildfile標(biāo)記來運(yùn)行ant,就像下面這樣: ant -buildfile Project_configuration.xml 在Listing A所示的SimpleBuild.xml配置文件里,你會(huì)看到一個(gè)項(xiàng)目標(biāo)簽,它帶有三個(gè)屬性:名字、缺省值和basedir。Ant使用說明里有Ant配置文件里每個(gè)標(biāo)簽的詳細(xì)文檔。你可能要使用Ant使用說明作為參考書來了解哪些是必需的標(biāo)簽,哪些有缺省值。 在項(xiàng)目標(biāo)簽里,你會(huì)看到屬性和目標(biāo)標(biāo)簽。屬性標(biāo)簽創(chuàng)建的變量能夠被任務(wù)和變量擴(kuò)展訪問。正如我們在后面所要看到的一樣,有一些變量,像日期和時(shí)間,能夠在任務(wù)內(nèi)部進(jìn)行設(shè)置,所以不是所有的變量都會(huì)被明確地定義。 在屬性標(biāo)簽后面,你會(huì)看到目標(biāo)標(biāo)簽。你可以定義多個(gè)目標(biāo),每一個(gè)都有不同的名字。你會(huì)注意到目標(biāo)標(biāo)簽的名字是compile,這碰巧和項(xiàng)目標(biāo)簽里的缺省值相對應(yīng)。這就意味著我們在執(zhí)行Ant的時(shí)候,它會(huì)自動(dòng)地啟動(dòng)compile目標(biāo)。 目標(biāo)里有許多的任務(wù),Ant按順序來執(zhí)行它們。你會(huì)發(fā)現(xiàn)構(gòu)建、包裝和發(fā)布過程中幾乎每一件事都可以由Ant的任務(wù)來處理。 在進(jìn)行簡單的構(gòu)建時(shí),我們使用tstamp任務(wù)來把當(dāng)前的日期和時(shí)間設(shè)置到環(huán)境變量里。下一步,我們會(huì)使用mkdir任務(wù)來創(chuàng)建一個(gè)叫做${build}的目錄。(假設(shè)它并不存在。這是我們腳本里命令解釋程序擴(kuò)展的第一個(gè)例子。Ant會(huì)自動(dòng)把“${build}”擴(kuò)展到屬性構(gòu)建所設(shè)置的值里,在這種情況下是build字符串。) 最后,我們會(huì)使用javac任務(wù)來編譯來自src目錄的源代碼,并把輸出保存到構(gòu)建里。 在運(yùn)行Ant時(shí),我們會(huì)讓輸出來顯示每個(gè)目標(biāo)執(zhí)行的狀態(tài),如圖D所示。 圖D ![]() Ant的輸出
|
使用條件 | ||
使用條件
在Ant里構(gòu)建條件不太容易。由于Ant構(gòu)建任務(wù)和目標(biāo)的方法,你不得不小心地構(gòu)造你的陳述式。只有當(dāng)屬性被設(shè)置成真值的時(shí)候,條件才能通過執(zhí)行對象來工作。你可以使用and、or和not陳述式來構(gòu)造你的條件。在一個(gè)條件被發(fā)現(xiàn)為真時(shí),你可以使用antcall任務(wù)來執(zhí)行另一個(gè)目標(biāo)。讓我們來看一個(gè)簡單的例子,它會(huì)確定可選的聲音任務(wù)是否可用,以及它是否在UNIX或者Windows上可用。 在Listing D所示的SoundConditional的例子里,你會(huì)看到條件任務(wù)會(huì)調(diào)用兩個(gè)條件陳述式: condWinSound和condUnixSound,但是兩者都不會(huì)主動(dòng)執(zhí)行,除非條件屬性被設(shè)置。條件目標(biāo)會(huì)檢查包裝是否可用(這是可選的jar文件一部分),以及在哪個(gè)平臺(tái)上可用。 包裝現(xiàn)在,你應(yīng)該已經(jīng)準(zhǔn)備好開始把自己的軟件項(xiàng)目轉(zhuǎn)移到Ant構(gòu)建工具上了。Ant正在越來越多地被開發(fā)人員用來支持大型的Java項(xiàng)目——而且是因?yàn)橛辛撕玫睦碛伞_@些工具是面向Java的、跨平臺(tái)的,而且一般都比面向UNIX的工具要更容易使用。希望本文能夠讓你看到Ant的力量,也能有助于提高你所在組織的產(chǎn)出。在以后的文章里,我們會(huì)來看通過創(chuàng)建自己的任務(wù)如何來擴(kuò)展Ant。 |