摘要:介紹在基于WSL開發(fā)過(guò)程中,如何使用ANT工具開發(fā)腳本來(lái)自動(dòng)構(gòu)建和部署應(yīng)用程序,從而幫助團(tuán)隊(duì)實(shí)現(xiàn)開發(fā)J2EE大型項(xiàng)目的編譯部署工作自動(dòng)化和規(guī)范化。
關(guān)鍵詞:Ant;部署;XML
中圖分類號(hào):TP311文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2008)23-00721-03
Using Ant To Achieve Building and Deployment
ZHOU Hong
(Topsthink Software Company, Fuzhou 350003, China)
Abstract: This paper introduced that how to use the ANT to automatically build and deploy applications in the development process Based on WSL, and helping the team who develop large-scale J2EE projects to achieve compiler and deployment of automated and standardized.
Key words: ANT; deploy; XML
1 引言
做為一個(gè)J2EE項(xiàng)目的測(cè)試人員,當(dāng)項(xiàng)目開發(fā)的規(guī)模越來(lái)越大,越來(lái)越繁重時(shí),每次都重新編譯,打包,測(cè)試,部署等一些操作都變得非常復(fù)雜而重復(fù)。雖然有IDE編程開發(fā)工具可以實(shí)現(xiàn)這些操作,但每次開啟jbuilder這樣的工具實(shí)在費(fèi)時(shí)。
而Ant正是這樣一個(gè)令構(gòu)建工作變得簡(jiǎn)單的工具,您不用不斷的使用javac、copy、cd、 java指令來(lái)達(dá)成這些目的,只要撰寫好構(gòu)建文件(buildfile),一個(gè)以XML組織的文件檔案,之后,最簡(jiǎn)單的情況下,您只要下達(dá)ant指令,所有的一切就可以完成。
Ant是Apache的Jakarta項(xiàng)目的一部分,它集成了java、javac、JAR、WAR和其他一些Java任務(wù)。它也支持多種文件系統(tǒng)任務(wù),獲得了操作系統(tǒng)無(wú)關(guān)性。在Windows下編寫的腳本也可以在Solaris下工作得很好。
2 ANT工具的安裝
如果是基于WSL開發(fā),只要客戶端安裝了bea weblogic platform就有ant工具了,將它的路徑“C:\\bea\\weblogic81\\server\\bin”寫到環(huán)境變量path里,就可以在cmd窗口里直接執(zhí)行了。
ANT的安裝也可以從Apache的網(wǎng)站下載:http://ant.apache.org,目前最新的版本是ANT1.6.2。當(dāng)然你的機(jī)子首先已經(jīng)安裝上了JDK,并且設(shè)置了JAVA_HOME等這些純Java的設(shè)置了。然后再設(shè)置ant的環(huán)境變量。
3 Ant的運(yùn)行
沒有指定任何參數(shù)時(shí),Ant會(huì)在當(dāng)前目錄下查詢build.xml文件。如果找到了就用該文件作為buildfile。如果你用 -find 選項(xiàng)。Ant就會(huì)在上級(jí)目錄中尋找buildfile,直至到達(dá)文件系統(tǒng)的根。要想讓Ant使用其他的buildfile,可以用參數(shù) -buildfile file,這里file指定了你想使用的buildfile。你可以用Ant -help命令查看ant運(yùn)行各項(xiàng)參數(shù)說(shuō)明。
可以指定執(zhí)行一個(gè)或多個(gè)target。當(dāng)省略target時(shí),Ant使用標(biāo)簽的default屬性所指定的target。
4 Ant的構(gòu)建文件的開發(fā)
當(dāng)開始一個(gè)新的項(xiàng)目時(shí),首先應(yīng)該編寫Ant構(gòu)建文件。構(gòu)建文件定義了構(gòu)建過(guò)程,并被團(tuán)隊(duì)開發(fā)中每個(gè)人使用。Ant構(gòu)建文件默認(rèn)命名為build.xml,也可以取其他的名字。只不過(guò)在運(yùn)行的時(shí)候把這個(gè)命名當(dāng)作參數(shù)傳給Ant。構(gòu)建文件可以放在任何的位置。
Ant構(gòu)建文件是XML文件。每個(gè)構(gòu)建文件定義一個(gè)唯一的項(xiàng)目(Project元素)。每個(gè)項(xiàng)目下可以定義很多目標(biāo)(target元素),這些目標(biāo)之間可以有依賴關(guān)系。當(dāng)執(zhí)行這類目標(biāo)時(shí),需要執(zhí)行他們所依賴的目標(biāo)。
下面是一個(gè)示例。
<?xml version=\"1.0\"?>
<project name=\"trMytest\" default=\"Mytest\" basedir=\".\">
<property name=\"src\" value=\"src/trMytest\"/>
<property name=\"build\" value=\"classes\"/>
<property name=\"lib\" value=\"lib\"/>
<property name=\"jarname\" value=\"ejbMytest.jar\"/>
<property name=\"warname\" value=\"trMytest.war\"/>
<property name=\"earname\" value=\"earMytest.ear\"/>
<property name=\"appname\" value=\"earMytest\"/>
<property name=\"web_inf\" value=\"DEFAULTROOT/WEB-INF\"/>
<property name=\"meta_inf\" value=\"META-INF\"/>
<property name=\"app\" value=\"../../app\"/>
<property file=\"../../config.properties\"/>
<target name=\"init\" depends=\"clean\">
<mkdir dir=\"${build}\"/>
<mkdir dir=\"${lib}\"/>
</target>
<target name=\"clean\">
<delete dir=\"${build}\"/>
<delete dir=\"${lib}\"/>
<delete file=\"${jarname}\"/>
<delete file=\"${warname}\"/>
<delete file=\"${earname}\"/>
</target>
<target name=\"compile\" depends=\"init\">
<javac srcdir=\"${src}\" destdir=\"${build}\">
<classpath>
<pathelement location=\"${mainpath}/wwcom/wwcom.jar\"/>
<fileset dir=\"${mainpath}/add-packet\">
<include name=\"*.jar\"/>
</fileset>
</classpath>
</javac>
</target>
<target name=\"jar\" depends=\"compile\">
<mkdir dir=\"${build}/META-INF\"/>
<copy todir=\"${build}/META-INF\">
<fileset dir=\"${meta_inf}\"/>
</copy>
<jar jarfile=\"${jarname}\" >
<fileset dir=\"${build}\"/>
<fileset dir=\"${meta_inf}\"/>
</jar>
</target>
<target name=\"war\" depends=\"compile\">
<war destfile=\"${warname}\" webxml=\"${web_inf}/web.xml\">
<classes dir=\"${build}\"/>
</war>
</target>
<target name=\"ear\" depends=\"war,jar\">
<ear destfile=\"${earname}\" appxml=\"application.xml\">
<fileset dir=\".\" includes=\"*.jar,*.war\"/>
</ear>
<copy file=\"${earname}\" todir=\"${app}\"/>
</target>
<target name=\"deploy\" depends=\"ear\">
<taskdef name=\"wldeploy\" classname=\"weblogic.ant.taskdefs.management.WLDeploy\"/>
<wldeploy action=\"deploy\"
source=\"${earname}\"
name=\"${appname}\"
adminurl=\"${adminurl}\"
user=\"${username}\"
password=\"${password}\"
targets=\"${server}\"
upload=\"true\"
debug=\"true\"/>
</target>
<target name=\"Mytest\" depends=\"deploy\"/>
</project>
示例中引用了一個(gè)屬性文件config.properties,是用來(lái)描述開發(fā)環(huán)境的信息的。config.properties編寫示例如下:
mainpath=D:/webback/app
adminurl=t3://localhost:7001
server=myserver
username=weblogic
password=weblogic
將上述兩個(gè)文件放在同級(jí)目錄下,在該目錄中運(yùn)行ant,就可以自動(dòng)完成Mytest的編譯、打包和部署。當(dāng)然你也可以只運(yùn)行一個(gè)target,如:ant deploy,只完成部署。
5 讓大型應(yīng)用的部署變得容易
如果一次將所有的組件都部署該怎么做?分開運(yùn)行每個(gè)build.xml腳本文件很麻煩。我們可以為應(yīng)用創(chuàng)建一個(gè)運(yùn)行所有Ant構(gòu)建腳本的Ant構(gòu)建腳本。這個(gè)腳本將應(yīng)用中所有的腳本組合在一起。我們定義一個(gè)all目標(biāo),他本身沒用具體功能,只是調(diào)用所有的依賴。主構(gòu)建腳本一般放在源程序的根目錄下。進(jìn)入那個(gè)根目錄運(yùn)行\(zhòng)"ant\"命令,整個(gè)項(xiàng)目的所有組件都會(huì)被部署。
6 結(jié)束語(yǔ)
此文介紹了如何使用Ant來(lái)構(gòu)建和部署WAR、EJB和EAR文件到WLS上,以及如何使用一個(gè)主構(gòu)建腳本來(lái)管理您的項(xiàng)目。建議對(duì)于每個(gè)EJB都將JAR文件的編譯和構(gòu)建放到一個(gè)單獨(dú)的build.xml中,公共部分可以移動(dòng)到主構(gòu)建腳本中。將這些構(gòu)建腳本集成到項(xiàng)目版本控制系統(tǒng)中,同源代碼一樣被受控,這對(duì)項(xiàng)目管理是非常的益的。
參考文獻(xiàn):
[1](美)海特.使用Ant進(jìn)行Java開發(fā)[M].北京:電子工業(yè)出版社,2005.
[2](美)Mark Artiges. BEA WebLogic Server 8.1大全[M].袁毅,譯.北京:機(jī)械工業(yè)出版社,2005.