Ant 作為 Java 領域最經典的構建工具,掌握其核心概念(Project、Target、Property、FileSet、Filter)與目標命名慣例,是實現持續整合、夜間構建的基礎。本文結合《Java極限編程》讀書筆記,系統整理 Ant 實戰要點。
| 層級 | 目標名 | 用途 |
|---|---|---|
| Top-level | clean | 清空輸出目錄 |
fetch | 從 CVS/SVN 獲取最新原始碼 | |
build | 編譯、打包 | |
test | 運行 JUnit 測試 | |
docs / javadocs | 生成文檔 | |
deploy | 部署 JAR/WAR 到執行環境 | |
publish | 發布原始碼與二進制到發布站點 | |
all | 依賴 clean, fetch, build, test, docs, deploy,一鍵全流程 | |
main | 預設構建(常為 build 或 build,test) | |
| Internal | init | 初始化屬性、讀取 property 檔 |
init-debug | 初始化除錯屬性 | |
init-release | 初始化發布屬性 | |
compile | 實際編譯任務 | |
link/jar | 建立 JAR/WAR 等成品 | |
staging | 預部署並測試 |
<target name="setupProduction" if="production"/>
<target name="setupDevelopment" unless="production"/>
命令列觸發:
ant -buildfile build.xml -Dproduction=true
<property name="lib" value="../lib"/>
<property name="outputdir" value="/tmp"/>
<!-- 方式 1:嵌套 pathelement -->
<path id="classpath1">
<pathelement location="."/>
<pathelement location="${lib}/log4j.jar"/>
</path>
<!-- 方式 2:path 屬性 -->
<path id="classpath2">
<pathelement path=".;${lib}/log4j.jar"/>
</path>
<!-- 方式 3:fileset 掃描 -->
<path id="classpath3">
<pathelement location="."/>
<fileset dir="${lib}">
<include name="**/*.jar"/>
</fileset>
</path>
<target name="compile">
<javac destdir="${outputdir}/classes" srcdir="./src">
<classpath refid="classpath3"/>
</javac>
</target>
<filter token="jdbc_url" value="jdbc:oracle:thin:@dev:1521:devdb"/>
配合 <copy filtering="true"> 可在部署時自動替換配置檔中的 @jdbc_url@。
<property name="production" value="true"/>
<ant antfile="sub-build.xml" inheritAll="false"/>
期待 IDE 能提供圖形化 build.xml 編輯器(如早期 NetBeans 的 properties 編輯器),降低 XML 手寫負擔。