簡單的ANT配置檔案

固步自封發表於2014-03-06

2.1 簡單的配置檔案

ANT的預設配置檔名為build.xml,現在我們來編輯一個簡單的配置檔案來練習一下,看ANT是如何進行編譯、打包和執行的。

2.1.1 建立工作目錄

首先要進入上一章提到的工程目錄project,建立一個工作目錄來儲存我們的工作,命令列效果如下:

song@ubuntu:~$ cd project
song@ubuntu:~/project$ mkdir t02
song@ubuntu:~/project$ cd t02
song@ubuntu:~/project/t02$

2.1.2 編輯配置檔案

在t02目錄下編輯配置檔案build.xml,內容如下:

<project>
  <target name="clean" description="清除任務">
    <delete dir="build"/>
  </target>

  <target name="compile" description="編譯任務">
    <mkdir dir="build/classes"/>
    <javac srcdir="src" destdir="build/classes" includeantruntime="on"/>
  </target>

  <target name="jar" description="打包任務">
    <mkdir dir="build/jar"/>
    <jar destfile="build/jar/hello.jar" basedir="build/classes">
      <manifest>
        <attribute name="Main-Class" value="my.app.Hello"/>
      </manifest>
    </jar>
  </target>

  <target name="run" description="執行任務">
    <java jar="build/jar/hello.jar" fork="true"/>
  </target>
</project>

2.1.3 配置檔案說明

  • project標籤 最外層project標籤表明這是一個ANT管理編譯的工程
  • target標籤 四個target標籤clean、compile、jar、run分別代表清除、編譯、打包、執行這四個我們要管理目標任務;每個目標任務都有一個名稱屬性(name,必需)和一個描述屬性(description,可選)。

每個目標任務(target標籤)都都包含一個或幾個動作標籤(task),包括delete、mkdir、javac、jar、java等,如下說明:

  • delete標籤,刪除動作,引數dir指定目錄名稱
  • mkdir標籤,建立目錄動作,引數dir指定要建立的目錄名稱
  • javac標籤,編譯動作,用javac命令編譯,引數srcdir指定原始碼目錄,引數destdir指定編譯目標存放目錄,引數includeantruntime="on"指定加入ANT的執行包
  • jar標籤,打包動作,用jar命令打包,引數destfile指定目標包名,basedir指定要打包的目錄
  • manifest標籤,建立manifest檔案動作,建立JAR包的同時為JAR包建立一個manifest檔案
  • attribute標籤,包含在manifest標籤中,為manifest檔案加一個attribute
  • java標籤,執行動作,用java命令執行指定的類,引數jar指定要執行的jar包名,引數fork指出再啟動一個JVM(JAVA虛擬機器)

2.2 編輯原始碼

2.2.1 建立原始碼目錄

編輯完配置檔案後,要建立原始碼目錄src和包目錄my/app,命令列效果如下:

song@ubuntu:~/project/t02$ mkdir -p src/my/app

2.2.2 編輯原始碼

設計了一個包,簡單起見命名為my.app,在包目錄my/app中編輯Hello類的原始檔Hello.java,原始碼如下:

package my.app;

public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

2.3 執行ANT

編輯儲存Hello.java,完成後就可以用ANT來編譯了。

2.3.1 不帶引數

不帶引數,直接執行ant命令列:

song@ubuntu:~/project/t02$ ant
Buildfile: /home/song/project/t02/build.xml

BUILD SUCCESSFUL
Total time: 0 seconds

輸出以上資訊,說明因為沒帶引數,ANT只檢查到了配置檔案build.xml,沒做其它動作。

2.3.2 編譯

帶引數命令列:ant compile,效果如下:

song@ubuntu:~/project/t02$ ant compile
Buildfile: /home/song/project/t02/build.xml

compile:
    [mkdir] Created dir: /home/song/project/t02/build/classes
[javac] Compiling 1 source file to /home/song/project/t02/build/classes

BUILD SUCCESSFUL
Total time: 1 second

輸出以上資訊,說明編譯成功,將一個原始檔編譯並將結果儲存到/home/song/project/t02/build/classes。 命令列:

song@ubuntu:~/project/t02$ ls build/classes/my/app
Hello.class

檢視到編譯結果Hello.class檔案。

2.3.3 打包

命令列:ant jar

song@ubuntu:~/project/t02$ ant jar
Buildfile: /home/song/project/t02/build.xml

jar:
    [mkdir] Created dir: /home/song/project/t02/build/jar
      [jar] Building jar: /home/song/project/t02/build/jar/hello.jar

BUILD SUCCESSFUL
Total time: 0 seconds

輸出以上資訊,說明打包成功,JAR包檔案儲存到/home/song/project/t02/build/jar/hello.jar。 命令列:

song@ubuntu:~/project/t02$ ls build/jar/
hello.jar

檢視到編譯結果hello.jar檔案。

2.3.4 執行

命令列: ant run

song@ubuntu:~/project/t02$ ant run
Buildfile: /home/song/project/t02/build.xml

run:
     [java] Hello world!

BUILD SUCCESSFUL
Total time: 0 seconds

輸出以上資訊,尤其是[java] Hello World!,是我們要輸出的,執行成功!

2.3.5 清除

命令列: ant clean

song@ubuntu:~/project/t02$ ant clean
Buildfile: /home/song/project/t02/build.xml

clean:
   [delete] Deleting directory /home/song/project/t02/build

BUILD SUCCESSFUL
Total time: 0 seconds

輸出以上資訊,刪除了build目錄,編譯和打包的結果被清除掉了。

注意:當我們重新編輯了原始碼,要重新編譯和打包時,先清除以前的編譯結果,可以保證編譯和打包的結果無差錯。

2.4 理解什麼是目標(target)和動作(task)

目標(target)的name屬性用來做ant命令的引數,一個工程(project)可以有多個目標(target),一個目標(target)可以有多個動作(task)。

除了配置檔案說明中提到的動作外,ANT還提供了非常多的可以直接用的動作,下面是幾個常用的task:

  • echo 顯示資訊
  • copy 複製檔案或目錄
  • move 移動(或重新命名)檔案或目錄
  • get 獲取指定URL的檔案(下載)
  • junit 執行JUNIT單元測試

在ANT的幫助文件(http://ant.apache.org/manual/index.html)中有動作列表(tasklist),可以參考學習使用。

ANT提供了大量的動作,使我們可以很輕鬆的編寫出靈活和實用的目標,這是選擇ANT做為編譯管理工具的主要原因之一。

需要說明的是編譯、打包、執行這四個任務是相互依賴的,必需依次執行,如果在未編譯的情況下,單獨執行run任務的話會出錯,如下所示:

song@ubuntu:~/project/t02$ ant run
Buildfile: /home/song/project/t02/build.xml

run:
     [java] Error: Unable to access jarfile /home/song/project/t02/build/jar/hello.jar
     [java] Java Result: 1

BUILD SUCCESSFUL
Total time: 0 seconds

也就是說這一章編輯的配置檔案build.xml過於簡略,並未指明依賴關係,使執行ANT命令過於複雜,下一步,我們將完善配置檔案build.xml,使其更象一個軟體工程。

相關文章