ANT學習筆記 (轉)

amyz發表於2007-11-16
ANT學習筆記 (轉)[@more@]

ANT學習筆記

作者: 車東 E: chedongATbigfoot.com/chedongATchedong.com

寫於:/05 最後: 06/29/2003 02:43:03

版權宣告:可以任意轉載,轉載時請務必以超連結形式標明文章原始出處和作者資訊及本宣告

關鍵詞:ant build. c

內容摘要:
ant是一個基於JAVA的自動化指令碼引擎,指令碼格式為XML。除了做JAVA編譯相關任務外,ANT還可以透過實現很多應用的。

  1. ANT的基本概念:
  2. ANT的:解包,設定路徑
  3. ANT的使用:最好的學習只不過是一個簡單實用的例子起步……

ANT的基本概念:Java的Makefile

當一個程式碼專案大了以後,每次重新編譯,打包,測試等都會變得非常複雜而且重複,因此c語言中有make指令碼來幫助這些工作的批次完成。在Java 中應用是平臺無關性的,當然不會用平臺相關的make指令碼來完成這些批處理任務了,ANT本身就是這樣一個流程指令碼引擎,用於自動化呼叫完成專案的編譯,打包,測試等。除了基於JAVA是平臺無關的外,指令碼的格式是基於XML的,比make指令碼來說還要好維護一些。

每個ant指令碼(預設叫build.xml)中設定了一系列任務(target):比如對於一個一般的專案可能需要有以下任務。

  • 任務1:usage 列印本指令碼的幫助資訊(預設)
  • 任務2:clean 任務3:javadoc 任務4:jar 任務5:all
而多個任務之間往往又包含了一定了依賴關係:比如把整個應用打包任務(jar)的這個依賴於編譯任務(build),而編譯任務又依賴於整個環境初始化任務(init)等。

注:我看到很多專案的ant指令碼中的命名基本上都是一致的,比如:編譯一般叫build或者compile;打包一般叫jar或war;生成文件一般命名為javadoc或javadocs;全部任務all。在每個任務的中,ANT會根據呼叫一些外部應用並配以相應引數執行。雖然ANT可呼叫的外部應用種類非常豐富,但其實最常用的就2,3個:比如javac javadoc jar等。

ANT的安裝

解包後在可執行路徑中加入指向ant的bin的路徑就可以了,比如可以在/上把以下配置加入/etc/profile中:
export ANT_HOME=/home/ant
export JAVA_HOME=/usr/java/j2sdk1.4.1
export PATH=$PATH:$JAVA_HOME/bin:$ANT_HOME/bin

這樣執行ant 後,如果不指定配置ant會預設找build.xml這個配置檔案,並根據配置檔案執行任務,預設的任務設定可以指向最常用的任務,比如: build,或指向列印幫助資訊:usage,告訴有那些指令碼選項可以使用。

ANT的使用

最好的學習過程就是看懂那些專案中的build.xml指令碼,然後根據自己的需要簡化成一個更簡單的,ANT和上很多非常工程派的專案:簡單易用,而且適應性非常強,因為這些專案的建立往往來源於開發人員日常最直接的需求。
以下是的一個/projects/lucene/">WebLucene應用的例子:修改自.org/">JDOM的build.xml:



  <!-- =================================================================== --&gt
  <!-- Initialization target  --&gt
  <!-- =================================================================== --&gt
 
 
 
 
 
 
 

 

 
 
 

 
 
 

 
 
 
 
 
 
 
 
 

 

 
 
 
 
 
 
 


  <!-- =================================================================== --&gt
  <!-- Help on usage  --&gt
  <!-- =================================================================== --&gt
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 


  <!-- =================================================================== --&gt
  <!-- Prepares the source code  --&gt
  <!-- =================================================================== --&gt
 
  <!-- create directories --&gt
 
 
 
  <!-- copy src files --&gt
 
 
 

 


  <!-- =================================================================== --&gt
  <!-- Compiles the source directory  --&gt
  <!-- =================================================================== --&gt
 
    destdir="${build.dest}"
  debug="${debug}"
  optimize="${optimize}">
 
 

 


  <!-- =================================================================== --&gt
  <!-- Creates the class package  --&gt
  <!-- =================================================================== --&gt
 
    basedir="${build.dest}"
  includes="**"/>
 


  <!-- =================================================================== --&gt
  <!-- Creates the API documentation  --&gt
  <!-- =================================================================== --&gt
 
 
    sourcepath="${build.src}"
  destdir="${build.javadocs}"
  author="true"
  version="true"
  use="true"
  splitindex="true"
  windowtitle="${Name} API"
  doctitle="${Name}">
 
 

 


  <!-- =================================================================== --&gt
  <!-- Clean targets  --&gt
  <!-- =================================================================== --&gt
 
 
 
 
 
 
 

 


<!-- End of file --&gt

預設任務:usage 列印幫助文件,告訴有那些任務選項:可用的有build, jar, javadoc和clean.

初始化環境變數:init
所有任務都基於一些基本環境變數的設定初始化完成,是後續其他任務的基礎,在環境初始化過程中,有2點比較可以方便設定:

1 除了使用卻預設的property設定了JAVA源路徑和輸出路徑外,引用了一個外部的build.properties檔案中的設定,

這樣大部分簡單配置使用者只要會看懂build.properties就可以了,畢竟XML比起key value的屬性檔案還是要可讀性差一些。用build.properties也可以方便其他使用者從編譯的細節中解放出來。

2 CLASSPATH設定:使用了其中的:
 
 
 
 
 

 

則相當於設定了:CLASSPATH=/path/to/resin/lib/jsdk23.jar; /path/to/project/lib/*.jar;

檔案複製:prepare-src
建立臨時SRC存放目錄和輸出目錄。
  <!-- =================================================================== --&gt
  <!-- Prepares the source code  --&gt
  <!-- =================================================================== --&gt
 
  <!-- create directories --&gt
 
 
 
  <!-- copy src files --&gt
 
 
 

 


編譯任務:build
編譯時的CLASSPATH環境透過一下方式找到引用一個path


打包任務:jar
對應用打包生成專案所寫名的.jar檔案
  <!-- =================================================================== --&gt
  <!-- Creates the class package  --&gt
  <!-- =================================================================== --&gt
 
    basedir="${build.dest}"
  includes="**"/>
 


生成JAVADOC文件任務: javadoc
  <!-- =================================================================== --&gt
  <!-- Creates the API documentation  --&gt
  <!-- =================================================================== --&gt
 
 
    sourcepath="${build.src}"
  destdir="${build.javadocs}"
  author="true"
  version="true"
  use="true"
  splitindex="true"
  windowtitle="${Name} API"
  doctitle="${Name}">
 
 

 


清空臨時編譯檔案:clean
  <!-- =================================================================== --&gt
  <!-- Clean targets  --&gt
  <!-- =================================================================== --&gt
 
 
 
 
 
 
 

 


TODO:
更多工/擴充套件:(樣例)
  • 測試任務:JUnit測試
  • 程式碼風格檢查任務:CheckStyle,Jalopy等
  • 警報任務:可以把以上這些任務的輸出警告傳送到制定的使用者列表中,這個任務可以設定每天自動執行。

參考資料:

Jakarta ANT:


原文出處:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-982801/,如需轉載,請註明出處,否則將追究法律責任。

相關文章