完善ANT的配置檔案

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

3.1 編寫功能完善的配置檔案

進一步用好ANT,現在開始學習ANT的配置檔案build.xml的詳細用法,。

3.1.1 建立工程目錄

命令列效果如下:

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

3.1.2 編輯完善的配置檔案

編輯配置檔案project/t03/build.xml,內容如下:

<project name="hello" basedir="." default="main">
  <!-- 定義常用的屬性 -->
  <property name="src.dir"     value="src"/>
  <property name="build.dir"   value="build"/>
  <property name="classes.dir" value="${build.dir}/classes"/>
  <property name="jar.dir"     value="${build.dir}/jar"/>
  <property name="version"     value="1.0"/>
  <property name="fullname"    value="${ant.project.name}-${version}"/>
  <property name="main-class"  value="my.app.Hello"/>

  <!-- 清除任務 -->
  <target name="clean">
    <delete dir="${build.dir}"/>
  </target>

  <!-- 編譯任務 -->
  <target name="compile">
    <mkdir dir="${classes.dir}"/>
    <javac srcdir="${src.dir}" destdir="${classes.dir}" includeantruntime="on"/>
  </target>

  <!-- 打包任務 -->
  <target name="jar" depends="compile">
    <mkdir dir="${jar.dir}"/>
    <jar destfile="${jar.dir}/${fullname}.jar" basedir="${classes.dir}">
      <manifest>
        <attribute name="Main-Class" value="${main-class}"/>
      </manifest>
    </jar>
  </target>

  <!-- 執行任務 -->
  <target name="run" depends="jar">
    <java jar="${jar.dir}/${fullname}.jar" fork="true"/>
  </target>

  <!-- 任務:清除並打包 -->
  <target name="clean-build" depends="clean,jar"/>

  <!-- 預設任務:清除並執行 -->
  <target name="main" depends="clean,run"/>

</project>

3.1.3 配置檔案說明

  • 關於工程(project) 工程的名稱(name),此檔案中值為hello; 工程的基準目錄(basedir),此檔案中值為.,即為當前目錄; 工程的預設任務(default),此檔案中值為main,即名為main的任務

  • 關於屬性(property),相當於程式中的變數 屬性定義: 屬性引用:${屬性名}

  • 原始碼目錄:src.dir,相當於./src

  • 構建目錄:build.dir,相當於./build
  • CLASS檔案目錄:class.dir,相當於./build/classes
  • JAR包目錄:jar.dir,相當於./build/jar
  • 版本號:version,值為1.0
  • 全名:fullname,值為ant.project.name-version,即hello-1.0
  • 主類名:main-class,值為my.app.Hello

  • 關於任務(target)

  • 任務關聯(depends),指定關聯的任務的名稱,則在執行此任務前一定要執行關聯的任務,即只有執行完關聯的任務,才會執行當前任務。

  • 關於動作(task),請參考:http://ant.apache.org/manual/tasklist.html

加入屬性定義後,使配置檔案更具可讀性了,也更靈活了,我們可以編寫更復雜功能更強大的配置檔案了,所以一定義要學習使用;加入關聯(depends)後,使我們自定義任務的邏輯關聯和執行順序聯絡更緊密了,步驟更清晰了,這無疑是我們想要的。

3.2 編譯原始碼

編輯配置檔案build.xml完成後,我們就可以開始編輯簡單的原始碼來練習使用ANT了。

3.2.1 編輯原始碼

原始碼檔案project/t03/src/my/app/Hello.java,內容如下:

package my.app;

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

因為目的是練習使用ANT,所以原始碼沒有改變,可以複製t02中的原始碼,命令列如下:

song@ubuntu:~/project/t03$ cp -r ../t02/src .

3.2.2 編譯執行

直接在命令列輸入ant,效果如下:

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

clean:

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

jar:
    [mkdir] Created dir: /home/song/project/t03/build/jar
      [jar] Building jar: /home/song/project/t03/build/jar/hello-1.0.jar

run:
     [java] Hello world!

main:

BUILD SUCCESSFUL
Total time: 1 second

輸出以上資訊,說明清除、編譯、打包、執行四個動作成功連續執行(這都是關聯的結果)。

當然也可以單獨執行,如果要清除編譯結果,執行ant clean命令,效果如下:

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

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

BUILD SUCCESSFUL
Total time: 0 seconds

3.2.3 工程的目錄結構

我們測試時的工程目錄結構是非常簡單的:

  • 原始碼目錄:src
  • 編譯結果class檔案目錄:build/classes
  • 編譯結果jar檔案目錄:build/jar

關於工程的目錄結構一定要形成自己的風格,而且也要別人能讀懂,這才是最好的。

只管理了一個簡單的工程,下一章節研究如何管理多個工程,多個子目錄,每個子目錄下都有原始碼。

相關文章