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

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

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

    Vincent.Chan‘s Blog

    常用鏈接

    統(tǒng)計(jì)

    積分與排名

    網(wǎng)站

    最新評(píng)論

    給編程狂熱者的ant task筆記

    這篇文檔是專門寫給那些編程狂熱者,在Ant里編程時(shí)要留意的重要Task。

    不知為何,老外的各種腳本都寫得格外漂亮。從Appfuse里學(xué)到很多,在編寫SpringSide2.0的構(gòu)件安裝腳本時(shí)又被迫自學(xué)了不少,這里作下總結(jié)。

    如果只說(shuō)一樣最重要的事情,就是ant-contrib的<if> 和 <for>節(jié)點(diǎn),使Ant 擁有了完整的編程能力。

    1. 變量

    Ant里的變量有個(gè)詭異的特性----一旦被賦值就不會(huì)改變,這個(gè)特性有時(shí)候幫助很大,有時(shí)候讓人很苦惱,一定要注意。另一樣要注意的是,Ant里的變量和其他語(yǔ)言的變量一樣,有可效范圍。

    1.由命令行賦值

    ant build.xml -Dtomcat.home=foo

    2.與用戶交互輸入--Input task

    <input message="請(qǐng)選擇一個(gè)Target "
    validargs="compile,jar,test"
    addproperty="my.input"/>

    3.從propertis文件讀取并存盤 -- propertyfile task

    <propertyfile file="my.properties">
    <entry key="springside.home" default="."/>
    </propertyfile>

    如果my.properties 不存在,生成my.properties文件,springside.home=.。有一個(gè)特別有用的地方:有些properties文件的屬性每個(gè)開發(fā)者都不同,不想放入svn,但又想初始化數(shù)值,可以用該命令。

    <propertyfile file="my.properties">
    <entry key="springside.home" value="....."/>
    </propertyfile>

    重新寫入配置文件。

    2. 流程控制

    如果沒有ant-contrib 貢獻(xiàn)的<if> 和<for>節(jié)點(diǎn),Ant的可編程性是極低極低的。

    2.1 if task

    ant原來(lái)可以在target級(jí)進(jìn)行if判斷(unless,if 屬性),但實(shí)在太不方便了。

    2.2 Conditions

    但Ant預(yù)先封裝的一堆condition很是很方便的。這些condition完全從實(shí)際出發(fā),包括文件是否存在,http://localhost:8080是否連通都可以作為條件,見Ant的參考手冊(cè)

    2.3 For task

    支持"a,b,c,d" 字符串?dāng)?shù)組的循環(huán)與文件目錄,F(xiàn)ileset的循環(huán)。

    2.4 Parallel task

    Parallel非常有用,比如我想一邊開tomcat,一邊做別的,就需要使用它,否則就只有用spawn=true屬性把tomcat放在后臺(tái)運(yùn)行。spawn有很多不好的地方,比如不能即時(shí)在console看到信息,停止ant運(yùn)行不能把tomcat關(guān)掉等。

    Parallel相當(dāng)于一個(gè)容器,放在里面的每個(gè)task都會(huì)被并行執(zhí)行。如果想把某幾個(gè)task順序執(zhí)行,用相當(dāng)于()的Sequential task 包起來(lái)。

    2.5 Waitfor task

    暫停ant執(zhí)行直到條件符合,比如<waitfor><http url=http://localhost:8080/></waitfor>就會(huì)等待tomcat啟動(dòng)后才會(huì)繼續(xù)往下執(zhí)行。Macrodef task

    3. 代碼封裝

    ant 代碼最基本的封裝是

    1. ant task:調(diào)用其他腳本的任務(wù),可設(shè)定dir 與是否繼承本腳本的變量。

    2. antcall task:調(diào)用本腳本內(nèi)其他task,可設(shè)置參數(shù)。

    3. import task :就像其他語(yǔ)言的include一樣,引入其他腳本內(nèi)容到本腳本里。

    1. AntFetch, AntCallBack task

    ant-contrib貢獻(xiàn),對(duì)應(yīng)于Ant 與 AntCall。原版只能向被調(diào)用函數(shù)傳遞變量,函數(shù)執(zhí)行后沒辦法return 值。antcallback的語(yǔ)法如下
    <antcallback target="mytarget" return="myresult1,myresult2"/>

    2. Macrodef task

    作為最小的封裝單位,與以<target>封裝再<antcall target="xxx">調(diào)用差不太遠(yuǎn),細(xì)微之處自行體驗(yàn)了。個(gè)人比較喜歡用macrodef。

    3. Java taskExec task 直接執(zhí)行Java類或程序

    注意執(zhí)行目錄的定義。另在Windows下如果要直接運(yùn)行dos窗口中的命令,以下指令啟動(dòng)默認(rèn)瀏覽器訪問(wèn)localhost:

    <exec executable="cmd.exe">
    <arg line="/c start http://localhost:8080"/>
    </exec>

    4. 擴(kuò)展Ant的Task

    擴(kuò)展ant task很簡(jiǎn)單,實(shí)現(xiàn)execute() 方法執(zhí)行task,實(shí)現(xiàn)setter接口讓ant框架執(zhí)行屬性注入。繼承Task 獲得一些ant的能力,比如查詢某個(gè)變量的值。

    稍微有點(diǎn)麻煩的是多層嵌套屬性的注入。詳細(xì)請(qǐng)看http://ant.apache.org/manual/developlist.html

    SpringSide 2.0 里很簡(jiǎn)單的實(shí)現(xiàn)了一個(gè)XML File Merge的task,見XmlMergeTask.java。

    蛋蛋 說(shuō)擴(kuò)展Ant的最方便的方法還是在ANT里嵌套腳本。導(dǎo)入BSF庫(kù)以后,你就可以用BSF支持的腳本語(yǔ)言了(見Script Task)。接下來(lái)有機(jī)會(huì)嘗試一下。


    5. 文件操作

    剛好springside里進(jìn)行了比較多的文件操作,隨便記一下。

    replace 與 copy 時(shí)加入filter, 都可以進(jìn)行字符串替換.

    concat 在文件末添加其他文件的內(nèi)容。

    好困,很多東西沒寫詳細(xì),明天再補(bǔ)充。

    題外話,Ant 完整演示了如何編寫XML式的代碼,雖然對(duì)于開發(fā)人員來(lái)說(shuō)XML編碼非常麻煩,遠(yuǎn)遠(yuǎn)沒有Ruby的rake以ruby代碼本身來(lái)構(gòu)建系統(tǒng)清晰,但對(duì)于IDE,特別是希望圖形化編程的IDE來(lái)說(shuō),XML比普通代碼要容易渲染得多,所以普元EOS的圖形化編程也是序列成XML代碼。再另外,Ant的task 和 普元的構(gòu)件也有相似。

    posted on 2006-09-08 00:18 Vincent.Chen 閱讀(277) 評(píng)論(0)  編輯  收藏 所屬分類: Java

    主站蜘蛛池模板: 亚洲精品在线免费观看视频| 亚洲高清免费在线观看| 亚洲男人都懂得羞羞网站| 亚洲综合免费视频| 国产偷国产偷亚洲高清人| 亚洲精品一品区二品区三品区| 在线永久看片免费的视频| 女bbbbxxxx另类亚洲| 久久精品夜色国产亚洲av| 麻豆国产VA免费精品高清在线| xxxxx做受大片视频免费| 亚洲国产成人91精品| 亚洲毛片不卡av在线播放一区| 3344永久在线观看视频免费首页| 看亚洲a级一级毛片| 91午夜精品亚洲一区二区三区| 亚洲乱码中文字幕综合234| 国产成人免费网站| 99久久免费国产特黄| 亚洲高清国产拍精品熟女| 久久久久亚洲AV片无码下载蜜桃| 免费国产成人高清在线观看麻豆 | 亚洲国产av一区二区三区丶| 亚洲AV无码一区二三区| 18国产精品白浆在线观看免费| 久草免费福利在线| 亚洲精品无码av中文字幕| 亚洲成熟xxxxx电影| 亚洲日韩涩涩成人午夜私人影院| 国产人在线成免费视频| 久久精品私人影院免费看| 国产亚洲高清在线精品不卡| 国产精品亚洲专区在线观看| 亚洲春色在线视频| 国产成人A亚洲精V品无码| 国产婷婷高清在线观看免费| 日本亚洲免费无线码| 120秒男女动态视频免费| 成全在线观看免费观看大全 | 99热免费在线观看| 久久国产一片免费观看|