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

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

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

    Aaronlong31

      BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
      12 Posts :: 3 Stories :: 17 Comments :: 0 Trackbacks

    Ant


    ?
     當(dāng)一個(gè)代碼項(xiàng)目大了以后,每次重新編譯,打包,測(cè)試等都會(huì)變得非常復(fù)雜而且重復(fù),因此c語(yǔ)言中有make腳本來(lái)幫助這些工作的批量完成。在Java 中應(yīng)用是平臺(tái)無(wú)關(guān)性的,當(dāng)然不會(huì)用平臺(tái)相關(guān)的make腳本來(lái)完成這些批處理任務(wù)了,ANT本身就是這樣一個(gè)流程腳本引擎,用于自動(dòng)化調(diào)用程序完成項(xiàng)目的編譯,打包,測(cè)試等。除了基于JAVA是平臺(tái)無(wú)關(guān)的外,腳本的格式是基于XML的,比make腳本來(lái)說(shuō)還要好維護(hù)一些。
      每個(gè)ant腳本(缺省叫build.xml)中設(shè)置了一系列任務(wù)(target):比如對(duì)于一個(gè)一般的項(xiàng)目可能需要有以下任務(wù)。
      * 任務(wù)1:usage 打印本腳本的幫助信息(缺省)
      * 任務(wù)2:clean <-- init 清空初始化環(huán)境
      * 任務(wù)3:javadoc <-- build <-- init 生成JAVADOC
      * 任務(wù)4:jar <-- build <-- init 生成JAR
      * 任務(wù)5:all <-- jar + javadoc <-- build <-- init 完成以上所有任務(wù):jar javadoc
      而多個(gè)任務(wù)之間往往又包含了一定了依賴關(guān)系:比如把整個(gè)應(yīng)用打包任務(wù)(jar)的這個(gè)依賴于編譯任務(wù)(build),而編譯任務(wù)又依賴于整個(gè)環(huán)境初始化任務(wù)(init)等。
      注:我看到很多項(xiàng)目的ant腳本中的命名基本上都是一致的,比如:編譯一般叫build或者compile;打包一般叫jar或war;生成文檔一般命名為 javadoc或javadocs;執(zhí)行全部任務(wù)all。在每個(gè)任務(wù)的中,ANT會(huì)根據(jù)配置調(diào)用一些外部應(yīng)用并配以相應(yīng)參數(shù)執(zhí)行。雖然ANT可調(diào)用的外部應(yīng)用種類非常豐富,但其實(shí)最常用的就2,3個(gè):比如javac javadoc jar等。
    ?
    ?
    Ant 開(kāi)發(fā)
      Ant的構(gòu)建文件
      當(dāng)開(kāi)始一個(gè)新的項(xiàng)目時(shí),首先應(yīng)該編寫(xiě)Ant構(gòu)建文件。構(gòu)建文件定義了構(gòu)建過(guò)程,并被團(tuán)隊(duì)開(kāi)發(fā)中每個(gè)人使用。Ant構(gòu)建文件默認(rèn)命名為build.xml,也可以取其他的名字。只不過(guò)在運(yùn)行的時(shí)候把這個(gè)命名當(dāng)作參數(shù)傳給Ant。構(gòu)建文件可以放在任何的位置。一般做法是放在項(xiàng)目頂層目錄中,這樣可以保持項(xiàng)目的簡(jiǎn)潔和清晰。下面是一個(gè)典型的項(xiàng)目層次結(jié)構(gòu)。
      (1) src存放文件。
      (2) class存放編譯后的文件。
      (3) lib存放第三方JAR包。
      (4) dist存放打包,發(fā)布以后的代碼。
      Ant構(gòu)建文件是XML文件。每個(gè)構(gòu)建文件定義一個(gè)唯一的項(xiàng)目(Project元素)。每個(gè)項(xiàng)目下可以定義很多目標(biāo)(target元素),這些目標(biāo)之間可以有依賴關(guān)系。當(dāng)執(zhí)行這類目標(biāo)時(shí),需要執(zhí)行他們所依賴的目標(biāo)。
      每個(gè)目標(biāo)中可以定義多個(gè)任務(wù),目標(biāo)中還定義了所要執(zhí)行的任務(wù)序列。Ant在構(gòu)建目標(biāo)時(shí)必須調(diào)用所定義的任務(wù)。任務(wù)定義了Ant實(shí)際執(zhí)行的命令。Ant中的任務(wù)可以為3類。
      (1) 核心任務(wù)。核心任務(wù)是Ant自帶的任務(wù)。
      (2) 可選任務(wù)。可選任務(wù)實(shí)來(lái)自第三方的任務(wù),因此需要一個(gè)附加的JAR文件。
      (3) 用戶自定義的任務(wù)。用戶自定義的任務(wù)實(shí)用戶自己開(kāi)發(fā)的任務(wù)。
      1.<project>標(biāo)簽
      每個(gè)構(gòu)建文件對(duì)應(yīng)一個(gè)項(xiàng)目。<project>標(biāo)簽時(shí)構(gòu)建文件的根標(biāo)簽。它可以有多個(gè)內(nèi)在屬性,就如代碼中所示,其各個(gè)屬性的含義分別如下。
      (1) default表示默認(rèn)的運(yùn)行目標(biāo),這個(gè)屬性是必須的。
      (2) basedir表示項(xiàng)目的基準(zhǔn)目錄。
      (3) name表示項(xiàng)目名。
      (4) description表示項(xiàng)目的描述。
      每個(gè)構(gòu)建文件都對(duì)應(yīng)于一個(gè)項(xiàng)目,但是大型項(xiàng)目經(jīng)常包含大量的子項(xiàng)目,每一個(gè)子項(xiàng)目都可以有自己的構(gòu)建文件。
      2.<target>標(biāo)簽
      一個(gè)項(xiàng)目標(biāo)簽下可以有一個(gè)或多個(gè)target標(biāo)簽。一個(gè)target標(biāo)簽可以依賴其他的target標(biāo)簽。
      例如,有一個(gè)target用于編譯程序,另一個(gè)target用于聲稱可執(zhí)行文件。在生成可執(zhí)行文件之前必須先編譯該文件,因策可執(zhí)行文件的target依賴于編譯程序的target。Target的所有屬性如下。
      (1).name表示標(biāo)明,這個(gè)屬性是必須的。
      (2).depends表示依賴的目標(biāo)。
      (3)if表示僅當(dāng)屬性設(shè)置時(shí)才執(zhí)行。
      (4)unless表示當(dāng)屬性沒(méi)有設(shè)置時(shí)才執(zhí)行。
      (5)description表示項(xiàng)目的描述。
      Ant的depends屬性指定了target的執(zhí)行順序。Ant會(huì)依照depends屬性中target出現(xiàn)順序依次執(zhí)行每個(gè)target。在執(zhí)行之前,首先需要執(zhí)行它所依賴的target。程序中的名為run的target的depends屬性compile,而名為compile的target的depends屬性是prepare,所以這幾個(gè)target執(zhí)行的順序是prepare->compile->run。
      一個(gè)target只能被執(zhí)行一次,即使有多個(gè)target依賴于它。如果沒(méi)有if或unless屬性,target總會(huì)被執(zhí)行。
      3.<mkdir>標(biāo)簽
      該標(biāo)簽用于創(chuàng)建一個(gè)目錄,它有一個(gè)屬性dir用來(lái)指定所創(chuàng)建的目錄名,其代碼如下:
      <mkdir dir=”${class.root}”/>
      通過(guò)以上代碼就創(chuàng)建了一個(gè)目錄,這個(gè)目錄已經(jīng)被前面的property標(biāo)簽所指定。
      4<jar>標(biāo)簽
      該標(biāo)簽用來(lái)生成一個(gè)JAR文件,其屬性如下。
      (1) destfile表示JAR文件名。
      (2) basedir表示被歸檔的文件名。
      (3) includes表示別歸檔的文件模式。
      (4) exchudes表示被排除的文件模式。
      5.<javac標(biāo)簽>
      該標(biāo)簽用于編譯一個(gè)或一組java文件,其屬性如下。
      (1).srcdir表示源程序的目錄。
      (2).destdir表示class文件的輸出目錄。
      (3).include表示被編譯的文件的模式。
      (4).excludes表示被排除的文件的模式。
      (5).classpath表示所使用的類路徑。
      (6).debug表示包含的調(diào)試信息。
      (7).optimize表示是否使用優(yōu)化。
      (8).verbose 表示提供詳細(xì)的輸出信息。
      (9).fileonerror表示當(dāng)碰到錯(cuò)誤就自動(dòng)停止。
      6.<java>標(biāo)簽
      該標(biāo)簽用來(lái)執(zhí)行編譯生成的.class文件,其屬性如下。
      (1).classname 表示將執(zhí)行的類名。
      (2).jar表示包含該類的JAR文件名。
      (3).classpath所表示用到的類路徑。
      (4).fork表示在一個(gè)新的虛擬機(jī)中運(yùn)行該類。
      (5).failonerror表示當(dāng)出現(xiàn)錯(cuò)誤時(shí)自動(dòng)停止。
      (6).output 表示輸出文件。
      (7).append表示追加或者覆蓋默認(rèn)文件。
      7.<delete>標(biāo)簽
      該標(biāo)簽用于刪除一個(gè)文件或一組文件,其屬性如下。
      (1)/file表示要?jiǎng)h除的文件。
      (2).dir表示要?jiǎng)h除的目錄。
      (3).includeEmptyDirs 表示指定是否要?jiǎng)h除空目錄,默認(rèn)值是刪除。
      (4).failonerror 表示指定當(dāng)碰到錯(cuò)誤是否停止,默認(rèn)值是自動(dòng)停止。
      (5).verbose表示指定是否列出所刪除的文件,默認(rèn)值為不列出。
      8.<copy>標(biāo)簽
      該標(biāo)簽用于文件或文件集的拷貝,其屬性如下。
      (1).file 表示源文件。
      (2).tofile 表示目標(biāo)文件。
      (3).todir 表示目標(biāo)目錄。
      (4).overwrite 表示指定是否覆蓋目標(biāo)文件,默認(rèn)值是不覆蓋。
      (5).includeEmptyDirs 表示制定是否拷貝空目錄,默認(rèn)值為拷貝。
      (6).failonerror 表示指定如目標(biāo)沒(méi)有發(fā)現(xiàn)是否自動(dòng)停止,默認(rèn)值是停止。
      (7).verbose 表示制定是否顯示詳細(xì)信息,默認(rèn)值不顯示。
    ?
    ?
     Ant 的安裝
      解包后在系統(tǒng)可執(zhí)行路徑中加入指向ant的bin的路徑就可以了,比如可以在GNU/Linux上把以下配置加入/etc/profile中:
      export ANT_HOME=/home/ant
      export JAVA_HOME=/usr/java/j2sdk1.4.1
      export PATH=$PATH:$JAVA_HOME/bin:$ANT_HOME/bin
      Windows 下的安裝:
      下載后解壓到某個(gè)目錄我這里以D:\apache-ant-1.7.1為例子:
      添加path全局環(huán)境變量:D:\apache-ant-1.7.1\bin
      這樣在command line就可以運(yùn)行ant命令了
      測(cè)試:運(yùn)行->cmd/command->ant 如果沒(méi)有安裝成功則回報(bào)找不到這個(gè)命令,安裝成功會(huì)有相關(guān)的提示信息顯示。
      這樣執(zhí)行ant 后,如果不指定配置文件ant會(huì)缺省找build.xml這個(gè)配置文件,并根據(jù)配置文件執(zhí)行任務(wù),缺省的任務(wù)設(shè)置可以指向最常用的任務(wù),比如: build,或指向打印幫助信息:usage,告訴用戶有那些腳本選項(xiàng)可以使用。
      Ant 的運(yùn)行
      安裝好Ant并且配置好路徑之后,在命令行中切換到構(gòu)建文件的目錄,輸入Ant命令就可以運(yùn)行Ant.若沒(méi)有指定任何參數(shù),Ant會(huì)在當(dāng)前目錄下查詢build.xml文件。如果找到了就用該文件作為構(gòu)建文件。如果使用了 –find 選項(xiàng),Ant 就會(huì)在上級(jí)目錄中找構(gòu)建文件,直至到達(dá)文件系統(tǒng)的根目錄。如果構(gòu)建文件的名字不是build.xml ,則Ant運(yùn)行的時(shí)候就可以使用 –buildfile file,這里file 指定了要使用的構(gòu)建文件的名稱,示例如下:
      Ant如下說(shuō)明了表示當(dāng)前目錄的構(gòu)建文件為build.xml 運(yùn)行 ant 執(zhí)行默認(rèn)的目標(biāo)。
      Ant –buildfile test.xml
      使用當(dāng)前目錄下的test.xml 文件運(yùn)行Ant ,執(zhí)行默認(rèn)的目標(biāo)
    posted on 2010-02-04 09:55 Aaronlong31 閱讀(364) 評(píng)論(0)  編輯  收藏

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 免费人妻无码不卡中文字幕18禁| 国产亚洲精aa成人网站| 精品国产日韩亚洲一区91| 亚洲日本中文字幕一区二区三区| 国产精品99久久免费观看| 亚洲精品自偷自拍无码| 国产精品亚洲精品日韩已方| 在线免费观看你懂的| 边摸边脱吃奶边高潮视频免费| 亚洲成亚洲乱码一二三四区软件| 国产乱码免费卡1卡二卡3卡| 免费一级全黄少妇性色生活片| 亚洲高清美女一区二区三区| 吃奶摸下高潮60分钟免费视频| 中文字幕天天躁日日躁狠狠躁免费| 国产成人亚洲综合a∨| 亚洲黄色在线观看网站| 亚洲精品视频免费| 无人在线观看免费高清视频| 大地资源网高清在线观看免费| 亚洲中文字幕精品久久| 亚洲AV乱码一区二区三区林ゆな| 免费永久看黄在线观看app| 成年黄网站色大免费全看| 两个人的视频www免费| 亚洲av中文无码字幕色不卡| 亚洲国产精品久久久久久| 亚洲精品偷拍视频免费观看| 无码人妻久久一区二区三区免费丨| 一级有奶水毛片免费看| 亚洲AV无码一区二区三区电影 | 亚洲经典在线中文字幕| 国产亚洲精午夜久久久久久| 免费高清资源黄网站在线观看| 91精品导航在线网址免费| 男女拍拍拍免费视频网站| WWW国产亚洲精品久久麻豆| jlzzjlzz亚洲jzjzjz| 亚洲va在线va天堂va888www| 亚洲无人区午夜福利码高清完整版| 麻豆国产人免费人成免费视频|