Aaronlong31

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

          Ant


          ?
           當(dāng)一個(gè)代碼項(xiàng)目大了以后,每次重新編譯,打包,測試等都會變得非常復(fù)雜而且重復(fù),因此c語言中有make腳本來幫助這些工作的批量完成。在Java 中應(yīng)用是平臺無關(guān)性的,當(dāng)然不會用平臺相關(guān)的make腳本來完成這些批處理任務(wù)了,ANT本身就是這樣一個(gè)流程腳本引擎,用于自動化調(diào)用程序完成項(xiàng)目的編譯,打包,測試等。除了基于JAVA是平臺無關(guān)的外,腳本的格式是基于XML的,比make腳本來說還要好維護(hù)一些。
            每個(gè)ant腳本(缺省叫build.xml)中設(shè)置了一系列任務(wù)(target):比如對于一個(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會根據(jù)配置調(diào)用一些外部應(yīng)用并配以相應(yīng)參數(shù)執(zhí)行。雖然ANT可調(diào)用的外部應(yīng)用種類非常豐富,但其實(shí)最常用的就2,3個(gè):比如javac javadoc jar等。
          ?
          ?
          Ant 開發(fā)
            Ant的構(gòu)建文件
            當(dāng)開始一個(gè)新的項(xiàng)目時(shí),首先應(yīng)該編寫Ant構(gòu)建文件。構(gòu)建文件定義了構(gòu)建過程,并被團(tuán)隊(duì)開發(fā)中每個(gè)人使用。Ant構(gòu)建文件默認(rèn)命名為build.xml,也可以取其他的名字。只不過在運(yùn)行的時(shí)候把這個(gè)命名當(dāng)作參數(shù)傳給Ant。構(gòu)建文件可以放在任何的位置。一般做法是放在項(xiàng)目頂層目錄中,這樣可以保持項(xiàng)目的簡潔和清晰。下面是一個(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類。
           ?。?) 核心任務(wù)。核心任務(wù)是Ant自帶的任務(wù)。
           ?。?) 可選任務(wù)??蛇x任務(wù)實(shí)來自第三方的任務(wù),因此需要一個(gè)附加的JAR文件。
            (3) 用戶自定義的任務(wù)。用戶自定義的任務(wù)實(shí)用戶自己開發(fā)的任務(wù)。
            1.<project>標(biāo)簽
            每個(gè)構(gòu)建文件對應(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)建文件都對應(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)屬性沒有設(shè)置時(shí)才執(zhí)行。
            (5)description表示項(xiàng)目的描述。
            Ant的depends屬性指定了target的執(zhí)行順序。Ant會依照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依賴于它。如果沒有if或unless屬性,target總會被執(zhí)行。
            3.<mkdir>標(biāo)簽
            該標(biāo)簽用于創(chuàng)建一個(gè)目錄,它有一個(gè)屬性dir用來指定所創(chuàng)建的目錄名,其代碼如下:
            <mkdir dir=”${class.root}”/>
            通過以上代碼就創(chuàng)建了一個(gè)目錄,這個(gè)目錄已經(jīng)被前面的property標(biāo)簽所指定。
            4<jar>標(biāo)簽
            該標(biāo)簽用來生成一個(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ò)誤就自動停止。
            6.<java>標(biāo)簽
            該標(biāo)簽用來執(zhí)行編譯生成的.class文件,其屬性如下。
            (1).classname 表示將執(zhí)行的類名。
            (2).jar表示包含該類的JAR文件名。
            (3).classpath所表示用到的類路徑。
            (4).fork表示在一個(gè)新的虛擬機(jī)中運(yùn)行該類。
            (5).failonerror表示當(dāng)出現(xiàn)錯(cuò)誤時(shí)自動停止。
            (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)值是自動停止。
            (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)沒有發(fā)現(xiàn)是否自動停止,默認(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命令了
            測試:運(yùn)行->cmd/command->ant 如果沒有安裝成功則回報(bào)找不到這個(gè)命令,安裝成功會有相關(guān)的提示信息顯示。
            這樣執(zhí)行ant 后,如果不指定配置文件ant會缺省找build.xml這個(gè)配置文件,并根據(jù)配置文件執(zhí)行任務(wù),缺省的任務(wù)設(shè)置可以指向最常用的任務(wù),比如: build,或指向打印幫助信息:usage,告訴用戶有那些腳本選項(xiàng)可以使用。
            Ant 的運(yùn)行
            安裝好Ant并且配置好路徑之后,在命令行中切換到構(gòu)建文件的目錄,輸入Ant命令就可以運(yùn)行Ant.若沒有指定任何參數(shù),Ant會在當(dāng)前目錄下查詢build.xml文件。如果找到了就用該文件作為構(gòu)建文件。如果使用了 –find 選項(xiàng),Ant 就會在上級目錄中找構(gòu)建文件,直至到達(dá)文件系統(tǒng)的根目錄。如果構(gòu)建文件的名字不是build.xml ,則Ant運(yùn)行的時(shí)候就可以使用 –buildfile file,這里file 指定了要使用的構(gòu)建文件的名稱,示例如下:
            Ant如下說明了表示當(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 閱讀(368) 評論(0)  編輯  收藏

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 东光县| 奎屯市| 玉环县| 沾化县| 会同县| 关岭| 砚山县| 沿河| 平泉县| 绥宁县| 阿拉尔市| 桦甸市| 和林格尔县| 灵台县| 西安市| 三亚市| 京山县| 枝江市| 丽水市| 东乌珠穆沁旗| 保定市| 措勤县| 新邵县| 根河市| 玛曲县| 泉州市| 兰州市| 常熟市| 拜城县| 开封市| 拉萨市| 招远市| 琼海市| 庄河市| 上高县| 台北县| 昔阳县| 定南县| 高密市| 安徽省| 南平市|