<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 89,  comments - 98,  trackbacks - 0

    基本應(yīng)用

    建立工程的目錄

    一般要根據(jù)工程的實(shí)際情況來(lái)建立工程的目錄結(jié)構(gòu)。但是,有一些比較通用的組織形式可供參考,比如所有的jakarta項(xiàng)目都使用類(lèi)似的目錄結(jié)構(gòu)。下面讓我們來(lái)看一下這種目錄結(jié)構(gòu)的特點(diǎn)。

    表1

    目錄 文件
    bin 公共的二進(jìn)制文件,以及運(yùn)行腳本
    build 臨時(shí)創(chuàng)建的文件,如類(lèi)文件等
    dist 目標(biāo)輸出文件,如生成Jar文件等。
    doc/javadocs 文檔。
    lib 需要導(dǎo)出的Java包
    src 源文件

    對(duì)于一個(gè)簡(jiǎn)單的工程,一般包括表1的幾個(gè)目錄。其中bin、lib、doc和src目錄需要在CVS的控制之下。當(dāng)然在這樣的目錄結(jié)構(gòu)上,也可以做一些調(diào)整,例如,可以建立一個(gè)extra目錄來(lái)放置需要發(fā)布的Jar文件、Inf文件及圖像文件等。同樣,如果開(kāi)發(fā)Web應(yīng)用可以建立一個(gè)Web目錄放置JSP、HTML等文件。

    如果我們開(kāi)發(fā)的是一個(gè)比較復(fù)雜的項(xiàng)目,包括多個(gè)子項(xiàng)目,并且各個(gè)子項(xiàng)目是由不同的開(kāi)發(fā)人員來(lái)完成的,那么要如何來(lái)設(shè)計(jì)它的目錄結(jié)構(gòu)?首先有一點(diǎn)是需要確定的,不同的子項(xiàng)目應(yīng)該擁有不同的Build文件,并且整個(gè)項(xiàng)目也應(yīng)該有一個(gè)總的Build文件。可以通過(guò)Ant任務(wù)或是AntCall任務(wù)調(diào)用子項(xiàng)目的Build文件,如下例:







    在各個(gè)子項(xiàng)目的耦合不是非常緊密的情況下,各個(gè)子項(xiàng)目應(yīng)該有各自獨(dú)立的目錄結(jié)構(gòu),也就是說(shuō)它們可以有自己的src、doc、build、dist等目錄及自己的build.xml文件,但是可以共享lib和bin目錄。而對(duì)于那些耦合緊密的子項(xiàng)目,則推薦使用同一個(gè)src目錄,但是不同的子項(xiàng)目有不同的子目錄,各個(gè)子項(xiàng)目的build.xml文件可以放在根目錄下,也可以移到各個(gè)子項(xiàng)目的目錄下。

    編寫(xiě)B(tài)uild文件

    要用好Ant工具,關(guān)鍵是要編寫(xiě)一個(gè)build.xml文件。要編寫(xiě)出一個(gè)結(jié)構(gòu)良好、靈活可擴(kuò)展的Build文件,有兩個(gè)問(wèn)題要考慮,一是了解Build文件的基本結(jié)構(gòu),二是了解Ant定義的大量任務(wù)。

    Ant的Build文件是一個(gè)標(biāo)準(zhǔn)的XML文件,它包含一個(gè)根節(jié)點(diǎn)Project,每個(gè)Project定義了至少一個(gè)或多個(gè)Target,每個(gè)Target又是一系列Task的集合。它們之間的關(guān)系如圖2所示。


    圖2 build.xml文件的結(jié)構(gòu)


    每個(gè)Task是一段可被執(zhí)行的代碼,比如,前例中的javac、jar就是兩個(gè)最常用的Task。Ant定義了大量的核心Task,我們要考慮的第二個(gè)問(wèn)題正是如何去掌握這大量的Task。其實(shí)唯一的方法就是邊學(xué)習(xí)邊實(shí)踐,這方面最好的參考就是官方的Ant使用手冊(cè)。

    外部文件的使用

    使用外部的Property文件可以保存一些預(yù)設(shè)置的公共屬性變量。這些屬性可以在多個(gè)不同的Build文件中使用。

    可以將一個(gè)外部的XML文件導(dǎo)入Build文件中,這樣多個(gè)項(xiàng)目的開(kāi)發(fā)者可以通過(guò)引用來(lái)共享一些代碼,同樣,這也有助于Build文件的重用,示例代碼如下所示:

    xml">
    xml">
    ]>

    &share-variable;
    &build-share;
    ... ...


    在J2EE項(xiàng)目中的應(yīng)用

    只要掌握了Ant的使用方法,在J2EE項(xiàng)目中的應(yīng)用與在其它項(xiàng)目中的應(yīng)用并沒(méi)有太大的不同,但是仍有幾點(diǎn)是需要注意的。

    一是要清楚War和Jar文件的目錄結(jié)構(gòu),主要是War的配置文件web.xml文件的位置和EJB的配置文件(ejb-jar.xmlweblogic-ejb-jar.xml等)的位置,在調(diào)用Jar任務(wù)打包文件時(shí)一定要記得把它們也包含進(jìn)來(lái)。一般在編譯之前就要注意把這些需打包的文件拷入相應(yīng)目錄下。二是在J2EE項(xiàng)目中可能會(huì)涉及到一些特殊的任務(wù),比如在Weblogic中會(huì)調(diào)用ejbc預(yù)編譯EJB的代碼存根,或者需要在Ant中同時(shí)發(fā)布Jar到相應(yīng)的服務(wù)器中等。可以用兩種途徑實(shí)現(xiàn)這些任務(wù),一是擴(kuò)展Ant任務(wù)實(shí)現(xiàn)這些任務(wù),二是直接用Java任務(wù)來(lái)執(zhí)行這些命令。下面是打包、發(fā)布一個(gè)EJB的build.xml配置文件片斷,代碼如下:




































    用Ant配合JUnit實(shí)現(xiàn)單元測(cè)試

    Ant 提供了JUnit任務(wù),可以執(zhí)行單元測(cè)試代碼。如何使用JUnit,以及如何編寫(xiě)測(cè)試用例(TestCase),感興趣的讀者可以參閱JUnit的相關(guān)文檔。在Ant中使用JUnit的方法非常簡(jiǎn)單,首先需要把junit.jar拷入ANT_HOME\lib下,確認(rèn)在這個(gè)目錄下有optional.jar,因?yàn)镴Unit是Ant的擴(kuò)展任務(wù),需要引用這個(gè)擴(kuò)展包。然后就是在Build文件中加入JUnit的任務(wù),代碼如下:







    antdemo.HelloWorldTest" />



    高級(jí)話題

    為Ant開(kāi)發(fā)擴(kuò)展任務(wù)

    為Ant實(shí)現(xiàn)擴(kuò)展任務(wù)其實(shí)是非常容易的,只需按照以下幾個(gè)步驟即可:

    1. 創(chuàng)建一個(gè)Java類(lèi)繼承org.apache.tools.ant.Task類(lèi);

    2. 對(duì)每個(gè)屬性實(shí)現(xiàn)set方法。Ant會(huì)根據(jù)需要自動(dòng)完成類(lèi)型轉(zhuǎn)換;

    3. 如果擴(kuò)展的任務(wù)需要嵌套其它的Task,那么這個(gè)Java類(lèi)必需實(shí)現(xiàn)接口org.apache.tools.ant.TaskContainer;

    4. 如果擴(kuò)展的任務(wù)要支持Text,需要增加一個(gè)方法void addText(String);

    5. 對(duì)每個(gè)嵌套的元素,實(shí)現(xiàn)create、add 或 addConfigured 方法;

    6. 實(shí)現(xiàn)public void execute方法;

    7. 在build.xml文件中使用 來(lái)引用自定義的Task。

    下面以一個(gè)簡(jiǎn)單的例子來(lái)說(shuō)明如何為Ant增加一個(gè)hello任務(wù),它可以連續(xù)打印多條信息,打印的次數(shù)由屬性count指定,而打印的內(nèi)容則由它內(nèi)嵌的一個(gè)helloinfo任務(wù)的message屬性指定,看上去這非常類(lèi)似JSP中自定義標(biāo)簽的一些概念,實(shí)現(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類(lèi)的代碼:

    //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;
    }
    }


    實(shí)現(xiàn)了這兩個(gè)Task,在build.xml文件中定義它的task name,就可以在Target中執(zhí)行它了。如果你不想使用 標(biāo)簽來(lái)定義Task,也可以通過(guò)修改default.properties文件來(lái)實(shí)現(xiàn)引入新Task,這個(gè)文件位于org.apache.tools.ant.taskdefs 包里。下例是一個(gè)使用 標(biāo)簽來(lái)引入新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 水煮三國(guó) 閱讀(534) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): OpenSource
    <2006年10月>
    24252627282930
    1234567
    891011121314
    15161718192021
    22232425262728
    2930311234

    常用鏈接

    留言簿(4)

    隨筆分類(lèi)(85)

    隨筆檔案(89)

    文章分類(lèi)(14)

    文章檔案(42)

    收藏夾(37)

    java

    oracle

    Sybase

    搜索

    •  

    積分與排名

    • 積分 - 211642
    • 排名 - 266

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 成人午夜免费福利视频| 国产日韩久久免费影院| 天堂亚洲国产中文在线| 亚洲人成伊人成综合网久久| 亚洲黄网在线观看| 久久丫精品国产亚洲av不卡 | 久久国产精品免费网站| a级片免费在线播放| 中文字幕久精品免费视频| 久久国产精品国产自线拍免费| 免费萌白酱国产一区二区三区| 中文字幕手机在线免费看电影| 99热在线日韩精品免费| 成人无码WWW免费视频| 国产精品免费大片| 91福利免费体验区观看区| 最近中文字幕无免费| 我的小后妈韩剧在线看免费高清版 | 国产国拍精品亚洲AV片| 亚洲VA成无码人在线观看天堂| 亚洲AV日韩AV天堂久久| 亚洲欧洲国产成人精品| 亚洲综合欧美色五月俺也去| 国产成人人综合亚洲欧美丁香花 | 看一级毛片免费观看视频| 国产裸体美女永久免费无遮挡| 鲁丝片一区二区三区免费| 亚洲成年人免费网站| 在线精品免费视频无码的| 亚洲国产精品不卡毛片a在线| 国产亚洲AV夜间福利香蕉149| 亚洲视频网站在线观看| 亚洲欧美国产精品专区久久| 成年免费大片黄在线观看com| 国产免费无码AV片在线观看不卡| 在线成人爽a毛片免费软件| 在线看片人成视频免费无遮挡| 亚洲精品无码专区2| 久久精品国产亚洲AV无码偷窥| 亚洲综合久久精品无码色欲| 日本永久免费a∨在线视频|