ANT 簡介

ANT 的角色是作為一個 跨平台 的批次檔或 shell script。 shell script 是幫助自動化發展應用程式的非核心工作, 像是檔案管理、源碼管理、程式庫 dependency 分析、 程式師合作的溝通。 讓程式師專注於解決他的問題, 基本上除了寫程式的事外,ANT 都能幫你作好, 她能為妳處理下面這些事。
  • 檔案管理- copy, move, mkdir, rename等
  • ANT 能從不同來源取得檔案的方法,像是 ftp, cvs, svn, http get 等
  • 也能用 ftp 來幫妳佈署檔案到遠端主機
  • 壓縮檔案
  • 支援 zip, unzip, jar, war, 幫妳生成包裝檔案
  • 利用 JDBC 設定資料庫
  • 利用 Telnet 幫妳設定遠端的 Server,ex.重開 weblogic
  • 支援 CVS, SVN 幫妳作版本控管
  • 利用 JUnit 自動幫妳作測試,並產生測試報告
  • XSLT 幫妳轉換 XML 的文件
  • XDOCLET 幫妳自動生成程式碼
  • 把 JSP 轉成 JAVA 可指定 tomcat 或 weblogic
  • 幫妳從檔案取代字串,通常用在 html sign 上最後修改日期的自動化
重點是上面這些工作妳可以全部在一個檔案定義, 然後用 ANT 去呼叫特定的工作, 把寫程式以外卻又必要的雜事集中控管, 又可以輕易的呼叫出來 功能強大,又跨平台, 不用 Linux 寫 sh,Windows 又要寫 bat。 所有的語法已被 XML 統一了, 所以 ftp telnet bat sh perl xslt copy find svn cvs 等奇怪的語法, 全部都可用 xml 表示,像是指定一組檔案, 在所有的命令都是用 來表示, 不用再去參考某命令的文件,再去找他指定一組檔案的語法

例:把 JSP 上傳測試機

  • 傳統上我們得用 ftp GUI client 貼上去,但每次改一段要測試就得重覆這個動作,在程式間跳來跳去,相當不方便。
  • 聰明一點的,會把利用 ftp 的 command 指令寫成巨集執行這個重覆的動作ftp 命令檔如下:
#deploy.ftp
root
rootpassword
cd /deploy/webapp
put /local/file1.jsp
put /local/file2.jsp
cd /deploy/classes
put /local/file1.class
put /local/file2.class
然後要上傳時輸入
ftp -s deploy.ftp
批次執行上述的 ftp 命令
看看 ANT 怎麼作?
         description="deploy files to pcstest machine" >

remotedir="${pcstest.operation.dir}"
userid="${pcstest.ftp.userid}"
password="${pcstest.ftp.password}" depends="yes" binary="no">





可以把 元素看成個別的 dos bat 檔 ,要執行只要輸入
ant deploy.pcstest
就可以執行 所定義的工作了。 再看看 ANT 的 copy 指令
         description="create a temp dir for make ncqmda release file" >












再看看 ANT 的 ZIP 指令
         description="create a nckmqa release zip" >





有沒有發現指定檔案集的方式都是用 。 若沒用 ANT,ftp 命令有一種指定檔案的語法, dos bat 又一種,unix 還有語法超級特殊的 find 指令, 每次用都要 man find 復習一下, 在 ANT 指定一組檔案就一種方法。

ANT 可統一設定所有的資源,包括 SQL, Telnet, CVS, http GET, mail

可遠端操作 Telnet 不用在使用其它的 cliet 去作這件事, 以下看看如何重開 weblogic。
  
userid="${pcstest.telnet.userid}"
password="${pcstest.telnet.password}">

cd ${pcstest.nckmdomain.dir}

stopWebLogic.sh

nohup startWebLogic.sh &



當然透過 JDBC 也可用 SQL 設定資料庫
  
driver="${db.pcs.driver}"
url="${db.pcs.url}"
userid="${db.pcs.userid}"
password="${db.pcs.password}">
CREATE TABLE oproom_material_record_detail2
(
oprmrd2_hospital_no char(1),
oprmrd2_operation_date char(8),
oprmrd2_room_no char(2),
oprmrd2_seq_no int,
oprmrd2_material_date char(8),
oprmrd2_material_time char(9),
oprmrd2_r1 char(4),
oprmrd2_r2 char(4),
oprmrd2_r3 char(4),
oprmrd2_material_no char(9),
v1f char(1),
v2f char(2),
v3f char(3),
r1f char(1),
r2f char(2),
r3f char(3)
);


cvs 或 svn 也通用,用來作版控。
  




自動寄 e-mail。




The ${buildname} nightly build has completed




從 http 抓檔案
     dest="statement.html"
username="1214";
password="secret"/>

ANT 能自動比較檔案的新舊,來作動作

ANT 能從不同來源取得檔案的方法, 像是 ftp, unzip, copy, cvs 等, 其中一個重點是當目的檔案比來源檔案舊時, 應該不可覆蓋來源檔案,相關的屬性如下
[v1|v2] 第一個表預設值
ftp.depends=[no|yes] yes 表不覆蓋
ftp.newer=[no|yes] yes 表不覆蓋
unzip.overwrite=[true|false] false 表不覆蓋
copy.overwrite=[false|true]false 表不覆蓋

直接看我的範例檔吧!


operation









location="${build.test.dir}/report"/>






value="jdbc:mysql://localhost/pss?useUnicode=true&characterEncoding=big5"/>




value="jdbc:informix-sqli://192.168.11.112:1526/pcs:authority:INFORMIXSERVER=nckmdb_tcp"/>










value="${pcstest.nckmdomain.dir}/applications/hospitalization"/>
value="${pcstest.ap.dir}/DefaultWebApp"/>
value="${pcstest.web.dir}/hospitalization3/operation"/>
value="${pcstest.web.dir}/WEB-INF/classes/"/>

location="d:\nckm\DefaultWebApp\hospitalization3"/>

value=":pserver:nckmcvs:nckmcvs@ftp-proxy.syscom.com.tw:/cvshome/nckm"/>
value="nckm_s"/>
description="setup a environment for this project" >


























description="put file to test machine" >
debug="on"
source="1.4"
target="1.4">





description="unit test" >






name="edu.ncku.hosp.OPRMaterialRecordTXTest"/>


description="deploy files to pcstest machine" >

remotedir="${pcstest.operation.dir}"
userid="${pcstest.ftp.userid}"
password="${pcstest.ftp.password}" depends="yes" binary="no">




remotedir="${pcstest.web.classes.dir}"
userid="${pcstest.ftp.userid}"
password="${pcstest.ftp.password}" depends="yes" binary="no">






remotedir="${test.server.operation}"
userid="root" password="wyj0806" depends="no" binary="no">





description="backup" >
value="${backup}/${ant.project.name}_${DSTAMP}${TSTAMP}.zip"/>




description="create a temp dir for make ncqmda release file" >












description="create a nckmqa release zip" >





description="clear release dir">


description="put release into nckmqa" >
remotedir="nckmqa"
userid="root"
password="wyj0806"
depends="yes"
binary="no">







description="restore src to initialize state" >








message="import procject files: ${scm}"/>




test.server.operation.dir=${test.server.operation}






userid="${pcstest.telnet.userid}"
password="${pcstest.telnet.password}">

cd ${pcstest.nckmdomain.dir}

stopWebLogic.sh

nohup startWebLogic.sh &




driver="${db.pcs.driver}"
url="${db.pcs.url}"
userid="${db.pcs.userid}"
password="${db.pcs.password}">
CREATE TABLE oproom_material_record_detail2
(
oprmrd2_hospital_no char(1),
oprmrd2_operation_date char(8),
oprmrd2_room_no char(2),
oprmrd2_seq_no int,
oprmrd2_material_date char(8),
oprmrd2_material_time char(9),
oprmrd2_r1 char(4),
oprmrd2_r2 char(4),
oprmrd2_r3 char(4),
oprmrd2_material_no char(9),
v1f char(1),
v2f char(2),
v3f char(3),
r1f char(1),
r2f char(2),
r3f char(3)
);




無廢話ANT 安裝

  1. 下載ANT
  2. 解壓縮至 c:\ant
  3. 設定環境變數 JAVA_HOME=C:\jdk
  4. 設定環境變數 ANT_HOME=C:\ant
  5. 設定環境變數 PATH=%ANT%\bin

使用 FTP task

安裝以下的庫至 %ant_home%/lib 下
  • jakarta-oro-2.0.8.jar
  • commons-net-1.4.0.jar
在 build.xml 第一行補上:
classname="org.apache.tools.ant.taskdefs.optional.net.FTP"/>

Ant vs Maven

Maven 是 ANT 的主要對手,其差異如下: Ant 有三個階層,project target task,但彼此互不關聯 Maven 在 project 層則隱涵target。

留言

這個網誌中的熱門文章

浴室水龍頭切換拉桿維修

【麵】的倉頡碼

投資現況