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

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

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

    Vincent.Chan‘s Blog

    常用鏈接

    統計

    積分與排名

    網站

    最新評論

    給編程狂熱者的ant task筆記

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

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

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

    1. 變量

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

    1.由命令行賦值

    ant build.xml -Dtomcat.home=foo

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

    <input message="請選擇一個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=.。有一個特別有用的地方:有些properties文件的屬性每個開發者都不同,不想放入svn,但又想初始化數值,可以用該命令。

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

    重新寫入配置文件。

    2. 流程控制

    如果沒有ant-contrib 貢獻的<if> 和<for>節點,Ant的可編程性是極低極低的。

    2.1 if task

    ant原來可以在target級進行if判斷(unless,if 屬性),但實在太不方便了。

    2.2 Conditions

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

    2.3 For task

    支持"a,b,c,d" 字符串數組的循環與文件目錄,Fileset的循環。

    2.4 Parallel task

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

    Parallel相當于一個容器,放在里面的每個task都會被并行執行。如果想把某幾個task順序執行,用相當于()的Sequential task 包起來。

    2.5 Waitfor task

    暫停ant執行直到條件符合,比如<waitfor><http url=http://localhost:8080/></waitfor>就會等待tomcat啟動后才會繼續往下執行。Macrodef task

    3. 代碼封裝

    ant 代碼最基本的封裝是

    1. ant task:調用其他腳本的任務,可設定dir 與是否繼承本腳本的變量。

    2. antcall task:調用本腳本內其他task,可設置參數。

    3. import task :就像其他語言的include一樣,引入其他腳本內容到本腳本里。

    1. AntFetch, AntCallBack task

    ant-contrib貢獻,對應于Ant 與 AntCall。原版只能向被調用函數傳遞變量,函數執行后沒辦法return 值。antcallback的語法如下
    <antcallback target="mytarget" return="myresult1,myresult2"/>

    2. Macrodef task

    作為最小的封裝單位,與以<target>封裝再<antcall target="xxx">調用差不太遠,細微之處自行體驗了。個人比較喜歡用macrodef。

    3. Java taskExec task 直接執行Java類或程序

    注意執行目錄的定義。另在Windows下如果要直接運行dos窗口中的命令,以下指令啟動默認瀏覽器訪問localhost:

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

    4. 擴展Ant的Task

    擴展ant task很簡單,實現execute() 方法執行task,實現setter接口讓ant框架執行屬性注入。繼承Task 獲得一些ant的能力,比如查詢某個變量的值。

    稍微有點麻煩的是多層嵌套屬性的注入。詳細請看http://ant.apache.org/manual/developlist.html

    SpringSide 2.0 里很簡單的實現了一個XML File Merge的task,見XmlMergeTask.java。

    蛋蛋 說擴展Ant的最方便的方法還是在ANT里嵌套腳本。導入BSF庫以后,你就可以用BSF支持的腳本語言了(見Script Task)。接下來有機會嘗試一下。


    5. 文件操作

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

    replace 與 copy 時加入filter, 都可以進行字符串替換.

    concat 在文件末添加其他文件的內容。

    好困,很多東西沒寫詳細,明天再補充。

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

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

    主站蜘蛛池模板: 国产亚洲真人做受在线观看| 免费一级e一片在线播放| 亚洲人成网址在线观看| 一级特黄录像视频免费| 亚洲av区一区二区三| 杨幂最新免费特级毛片| gogo全球高清大胆亚洲| 国产成人精品亚洲一区| 免费大黄网站在线观看| 免费精品久久久久久中文字幕| 国产精品色午夜免费视频| 亚洲精品国产综合久久久久紧| 日韩中文字幕免费| 色多多www视频在线观看免费| 日韩精品亚洲aⅴ在线影院| 国产亚洲免费的视频看| 亚洲精品在线播放| 午夜两性色视频免费网站| 黄人成a动漫片免费网站| 久久综合亚洲色HEZYO国产| 嫩草成人永久免费观看| 亚洲另类古典武侠| 国产一区二区三区在线免费 | 亚洲一区二区三区国产精品无码 | 日本免费一区二区在线观看| 亚洲ts人妖网站| 日本高清免费中文字幕不卡| 亚洲免费一区二区| 亚洲麻豆精品果冻传媒| 日韩精品无码人妻免费视频 | 久久国产精品免费专区| 亚洲粉嫩美白在线| 男人的天堂亚洲一区二区三区 | 亚洲国产综合91精品麻豆| 97免费人妻无码视频| 女人裸身j部免费视频无遮挡| 亚洲av最新在线网址| 成年女人18级毛片毛片免费| 亚欧国产一级在线免费| 亚洲精品成人久久| 亚洲精品视频免费观看|