2011年7月28日 星期四

[記事] Ant 入門

下載 

http://ant.apache.org/bindownload.cgi

安裝

壓縮檔解開來即可,把 bin/目錄加到你的執行目錄中

簡單使用說明

ant 執行的工作定義在執行目前執行目錄下的 build.xml ,如果你想指定其他的,可在執行時加 -f 參數指定。

而build.xml 裡有兩個主要的標籤
project : 定義你的專案,包含你要執行的工作目標
target: 定義你的工作目標,一個project 中可以多個 target,而一個target 中至少應該包含一個工作任務 (task),詳細的工作項目列表請參考 : http://ant.apache.org/manual/tasklist.html
以下是一個簡單的 build.xml範例,只定義了一個工作目標"hi",裡頭只執行一個 echo 的任務
<project>
  <target name="hi">
    <echo>Hello World!</echo>
  </target>
</project>
執行

ant 執行時預設會去找當前目錄下的build.xml,然後執行你指定的工作目標
shell> ant hi
Buildfile: /home/staff/ywhuang/app/java/jts_current/build.xml
hi:
     [echo] Hello World!
BUILD SUCCESSFUL
Total time: 0 seconds
(如果 project 有加上 default 的屬性,那只要執行 ant 即可)
<project default="hi">
  <target name="hi">
    <echo>Hello World!</echo>
  </target>
</project>
進階使用範例

假設我們現在編譯、執行、測試一組Java 程式,而每次重新編譯前都要先清除掉舊的class檔,並清掉DB內舊資料,那build file 我們可以這樣寫

在Ant中使用SVN ? 可以,但那是另一個艱辛的故事了,有機會再說吧
<project name="MyProject" basedir=".">
    <description>
        simple example build file
    </description>
  <!-- 設定執行時需要用到的一些屬性,可以寫在 property 標籤裡,也可以寫在外頭的另一個檔,再讀進來 -->

  <property file="build.properties" />
  <!-- 定義一般的 java 函式庫 -->
  <path id="java.classpath">
      <pathelement path="${build}"/>
      <pathelement path="/home/staff/ywhuang/app/java/lib/mysql-connector-java-5.1.16-bin.jar"/>
  </path>
  <target name="init">
    <!-- 產生timestamp -->
    <tstamp/>
    <!-- 建立編譯時需要的目錄, -->
    <mkdir dir="${build}"/>
  </target>
  <target name="compile" description="compile the source " >
    <!-- Compile the java code from ${src} into ${build} -->
    <javac srcdir="${src}" destdir="${build}" classpathref="java.classpath" />
  </target>
  <!-- 執行 java 程式 -->
  <target name="run">
    <java classname="JTS" classpathref="java.classpath" />
  </target>
  <!-- 每次重新編譯前先清除舊的 class 檔及DB中的舊資料 -->
  <target name="clean" description="clean up" >
    <!--刪除編譯目錄 -->
    <delete dir="${build}"/>
    <!-- 讀取後頭SQL連線時需要的密碼,可以直接明碼寫死 -->
    <!-- 但讓使用者輸入後再指定給password 會比較安全 -->
    <input message="mysql password:>" addproperty="password">
          <handler classname="org.apache.tools.ant.input.SecureInputHandler" />
    </input>
    <!-- 連線到 mysql server 並執行清除舊資料的工作 -->
    <sql driver="com.mysql.jdbc.Driver" url="${mysql.url}" userid="root" password="${password}" classpath="${mysql.classpath}">
        truncate table my_table_1;
        truncate table my_table_2;
    </sql>
  </target>
</project>
而 build.properties 的內容如下
build=classes
src=src
執行時依序執行 ant clean, ant init, ant compile, ant run 即可

如果連四個指令都嫌麻煩,那還可以更簡單 : 利用 target 的depends 屬性,指定run 執行前要先執行compile,compile 前要先init ,init 前要先clean,如果再幫project加上default="run",那只要執行 ant 就可以一次全部執行完
<project name="MyProject" default="run" basedir=".">
  <target name="init" depends="clean">
  <!-- 略 -->
  </target>
  <target name="compile" depends="init">
  <!-- 略 -->
  </target>
  <target name="run" depends="compile">
  <!-- 略 -->
  </target>
  <target name="clean" description="clean up" >
  <!-- 略 -->
  </target>
</project>
執行結果:
shell > ant
Buildfile: /home/staff/ywhuang/app/java/jts_current/build.xml
clean:
   [delete] Deleting directory /home/staff/ywhuang/app/java/jts_current/classes
mysql password:>
      [sql] Executing commands
      [sql] 2 of 2 SQL statements executed successfully
init:
    [mkdir] Created dir: /home/staff/ywhuang/app/java/jts_current/classes
compile:
    [javac] Compiling 9 source files to /home/staff/ywhuang/app/java/jts_current/classes
run:
     [java] some java system.out messages
BUILD SUCCESSFUL
Total time: 16 seconds
Ref
http://ant.apache.org/manual/index.html

0 意見:

張貼留言