OMG,到底在尋找什么..................
          (構造一個完美的J2EE系統(tǒng)所需要的完整知識體系)
          posts - 198,  comments - 37,  trackbacks - 0
          轉貼地址:http://www.aygfsteel.com/calvin/archive/2006/09/07/68150.html
          作者:江南白衣

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

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

          ??? 如果只說一樣最重要的事情,就是ant-contrib的<if> 和 <for>節(jié)點,使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文件的屬性每個開發(fā)者都不同,不想放入svn,但又想初始化數(shù)值,可以用該命令。

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

          ????? 重新寫入配置文件。

          2. 流程控制

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

          ?2.1 if task

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

          2.2 Conditions

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

          2.3 For task

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

          2.4 Parallel task

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

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

          2.5 Waitfor task

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

          3. 代碼封裝

          ?ant 代碼最基本的封裝是

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

          ?2. antcall task:調用本腳本內其他task,可設置參數(shù)。

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

          1. AntFetch,? AntCallBack task

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

          2. Macrodef task

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

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

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

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

          4. 擴展Ant的Task

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

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

          ?? SpringSide 2.0 里很簡單的實現(xiàn)了一個XML File Merge的task,見XmlMergeTask.java。

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


          ?5. 文件操作

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

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

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

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

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

          posted on 2006-09-08 13:13 OMG 閱讀(964) 評論(0)  編輯  收藏 所屬分類: Ant/Maven

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導航:
           

          <2006年9月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          1234567

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          IT風云人物

          文檔

          朋友

          相冊

          經(jīng)典網(wǎng)站

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 荆门市| 乡宁县| 枣阳市| 北碚区| 沂南县| 赤壁市| 延长县| 额济纳旗| 民权县| 西吉县| 启东市| 邵阳市| 清水县| 行唐县| 黑龙江省| 东明县| 大渡口区| 连平县| 县级市| 吉隆县| 葵青区| 静乐县| 黔东| 碌曲县| 潢川县| 南涧| 陆河县| 阿尔山市| 耿马| 桦甸市| 广南县| 佛冈县| 滦南县| 麟游县| 永春县| 汤阴县| 安龙县| 舟曲县| 大洼县| 怀远县| 桐城市|