基本應(yīng)用
建立工程的目錄
一般要根據(jù)工程的實際情況來建立工程的目錄結(jié)構(gòu)。但是,有一些比較通用的組織形式可供參考,比如所有的jakarta項目都使用類似的目錄結(jié)構(gòu)。下面讓我們來看一下這種目錄結(jié)構(gòu)的特點。
表1
目錄 |
文件 |
bin |
公共的二進制文件,以及運行腳本 |
build |
臨時創(chuàng)建的文件,如類文件等 |
dist |
目標輸出文件,如生成Jar文件等。 |
doc/javadocs |
文檔。 |
lib |
需要導(dǎo)出的Java包 |
src |
源文件 |
對于一個簡單的工程,一般包括表1的幾個目錄。其中bin、lib、doc和src目錄需要在
CVS的控制之下。當(dāng)然在這樣的目錄結(jié)構(gòu)上,也可以做一些調(diào)整,例如,可以建立一個extra目錄來放置需要發(fā)布的Jar文件、Inf文件及圖像文件等。同樣,如果開發(fā)Web應(yīng)用可以建立一個Web目錄放置JSP、HTML等文件。
如果我們開發(fā)的是一個比較復(fù)雜的項目,包括多個子項目,并且各個子項目是由不同的開發(fā)人員來完成的,那么要如何來設(shè)計它的目錄結(jié)構(gòu)?首先有一點是需要確定的,不同的子項目應(yīng)該擁有不同的Build文件,并且整個項目也應(yīng)該有一個總的Build文件。可以通過Ant任務(wù)或是AntCall任務(wù)調(diào)用子項目的Build文件,如下例:
在各個子項目的耦合不是非常緊密的情況下,各個子項目應(yīng)該有各自獨立的目錄結(jié)構(gòu),也就是說它們可以有自己的src、doc、build、dist等目錄及自己的build.
xml文件,但是可以共享lib和bin目錄。而對于那些耦合緊密的子項目,則推薦使用同一個src目錄,但是不同的子項目有不同的子目錄,各個子項目的build.
xml文件可以放在根目錄下,也可以移到各個子項目的目錄下。
編寫B(tài)uild文件 要用好Ant工具,關(guān)鍵是要編寫一個build.
xml文件。要編寫出一個結(jié)構(gòu)良好、靈活可擴展的Build文件,有兩個問題要考慮,一是了解Build文件的基本結(jié)構(gòu),二是了解Ant定義的大量任務(wù)。
Ant的Build文件是一個標準的XML文件,它包含一個根節(jié)點Project,每個Project定義了至少一個或多個Target,每個Target又是一系列Task的集合。它們之間的關(guān)系如圖2所示。

圖2 build.xml文件的結(jié)構(gòu)
每個Task是一段可被執(zhí)行的代碼,比如,前例中的javac、jar就是兩個最常用的Task。Ant定義了大量的核心Task,我們要考慮的第二個問題正是如何去掌握這大量的Task。其實唯一的方法就是邊學(xué)習(xí)邊實踐,這方面最好的參考就是官方的Ant使用手冊。
外部文件的使用 使用外部的Property文件可以保存一些預(yù)設(shè)置的公共屬性變量。這些屬性可以在多個不同的Build文件中使用。
可以將一個外部的XML文件導(dǎo)入Build文件中,這樣多個項目的開發(fā)者可以通過引用來共享一些代碼,同樣,這也有助于Build文件的重用,示例代碼如下所示:
xml"> xml"> ]>
&share-variable; &build-share; ... ... |
在J2EE項目中的應(yīng)用
只要掌握了Ant的使用方法,在J2EE項目中的應(yīng)用與在其它項目中的應(yīng)用并沒有太大的不同,但是仍有幾點是需要注意的。
一是要清楚War和Jar文件的目錄結(jié)構(gòu),主要是War的配置文件web.
xml文件的位置和EJB的配置文件(ejb-jar.
xml和
weblogic-ejb-jar.
xml等)的位置,在調(diào)用Jar任務(wù)打包文件時一定要記得把它們也包含進來。一般在編譯之前就要注意把這些需打包的文件拷入相應(yīng)目錄下。二是在J2EE項目中可能會涉及到一些特殊的任務(wù),比如在Weblogic中會調(diào)用ejbc預(yù)編譯EJB的代碼存根,或者需要在Ant中同時發(fā)布Jar到相應(yīng)的服務(wù)器中等。可以用兩種途徑實現(xiàn)這些任務(wù),一是擴展Ant任務(wù)實現(xiàn)這些任務(wù),二是直接用Java任務(wù)來執(zhí)行這些命令。下面是打包、發(fā)布一個EJB的build.
xml配置文件片斷,代碼如下:
用Ant配合JUnit實現(xiàn)單元測試
Ant 提供了JUnit任務(wù),可以執(zhí)行單元測試代碼。如何使用JUnit,以及如何編寫測試用例(TestCase),感興趣的讀者可以參閱JUnit的相關(guān)文檔。在Ant中使用JUnit的方法非常簡單,首先需要把junit.jar拷入ANT_HOME\lib下,確認在這個目錄下有optional.jar,因為JUnit是Ant的擴展任務(wù),需要引用這個擴展包。然后就是在Build文件中加入JUnit的任務(wù),代碼如下:
antdemo.HelloWorldTest" />
|
高級話題
為Ant開發(fā)擴展任務(wù) 為Ant實現(xiàn)擴展任務(wù)其實是非常容易的,只需按照以下幾個步驟即可:
1. 創(chuàng)建一個Java類繼承org.apache.tools.
ant.Task類;
2. 對每個屬性實現(xiàn)set方法。Ant會根據(jù)需要自動完成類型轉(zhuǎn)換;
3. 如果擴展的任務(wù)需要嵌套其它的Task,那么這個Java類必需實現(xiàn)接口org.apache.tools.
ant.TaskContainer;
4. 如果擴展的任務(wù)要支持Text,需要增加一個方法void addText(String);
5. 對每個嵌套的元素,實現(xiàn)create、add 或 addConfigured 方法;
6. 實現(xiàn)public void execute方法;
7. 在build.
xml文件中使用
來引用自定義的Task。
下面以一個簡單的例子來說明如何為Ant增加一個hello任務(wù),它可以連續(xù)打印多條信息,打印的次數(shù)由屬性count指定,而打印的內(nèi)容則由它內(nèi)嵌的一個helloinfo任務(wù)的message屬性指定,看上去這非常類似JSP中自定義標簽的一些概念,實現(xiàn)代碼如下:
//HelloInfoTask.java package com.sharetop.antdemo; import org.apache.tools.ant.*; public class HelloInfoTask { private String msg; public void execute() throws BuildException { System.out.println(msg); } public void setMessage(String msg) { this.msg = msg; } } |
下面是外部Task類的代碼:
//HelloTask.java package com.sharetop.antdemo; import org.apache.tools.ant.*; public class HelloTask extends Task implements org.apache.tools.ant.TaskContainer { private Task info; private int count; public void execute() throws BuildException { for(int i=0;i info.execute(); } public void setCount(int c){ this.count=c; } public void addTask(Task t){ this.info=t; } } |
實現(xiàn)了這兩個Task,在build.xml文件中定義它的task name,就可以在Target中執(zhí)行它了。如果你不想使用 標簽來定義Task,也可以通過修改default.properties文件來實現(xiàn)引入新Task,這個文件位于org.apache.tools.ant.taskdefs 包里。下例是一個使用 標簽來引入新Task的Build文件部分:
classname="com.sharetop.antdemo.HelloTask" classpath="client.jar"/>
classname="com.sharetop.antdemo.HelloInfoTask" classpath="client.jar"/>
|
(未完待續(xù))
posted on 2006-10-17 16:30
水煮三國 閱讀(528)
評論(0) 編輯 收藏 所屬分類:
OpenSource