Ant(Another Neat Tool) 是當今 Java 生態系事實標準的建構工具。幾乎所有開源 Java 專案皆採用 Ant 進行編譯、打包、部署,主流 IDE(Eclipse、IntelliJ IDEA、NetBeans)亦完美整合 Ant 支援。
build.xml,到處執行apache-ant-1.6.5-bin.zip)C:\ant\apache-ant-1.6.5 或 /usr/local/ant)ANT_HOME = Ant 安裝目錄PATH 新增 %ANT_HOME%\bin (Win) 或 $ANT_HOME/bin (Unix)ant -version 顯示版本資訊即成功最佳教材即 Ant 內建文件:$ANT_HOME/docs/manual/index.html。涵蓋所有 Task 參數、最佳實踐、進階技巧,隨時離線查閱。
<?xml version="1.0"?>
<project name="專案名稱" default="預設目標" basedir=".">
<description>建構說明</description>
<property name="src.dir" value="${basedir}/src"/>
<property name="build.dir" value="${basedir}/classes"/>
<property name="dist.dir" value="${basedir}/dist"/>
<target name="clean" description="清理輸出目錄">
<delete dir="${build.dir}"/>
<delete dir="${dist.dir}"/>
</target>
<target name="compile" depends="clean" description="編譯原始碼">
<mkdir dir="${build.dir}"/>
<javac srcdir="${src.dir}" destdir="${build.dir}" includeantruntime="false"/>
</target>
<target name="jar" depends="compile" description="打包 JAR">
<mkdir dir="${dist.dir}"/>
<jar destfile="${dist.dir}/${ant.project.name}.jar" basedir="${build.dir}"/>
</target>
<target name="run" depends="jar" description="執行主類別">
<java classname="com.example.Main" classpath="${dist.dir}/${ant.project.name}.jar" fork="true"/>
</target>
</project>
| 元素 | 用途 |
|---|---|
<project> | 根元素,定義專案名、預設目標、基準目錄 |
<target> | 建構階段單元,有名稱、描述、依賴關係(depends) |
<property> | 定義不可變屬性(類常數),支援檔案/環境變數導入 |
<task> | 實際執行動作(javac、jar、copy、delete 等) |
D:\antTest\ ├── build.xml ├── src\ │ └── test\ │ └── Main.java └── classes\ (自動生成)
package test;
public class Main {
public static void main(String[] args) {
System.out.println("Test Ant");
}
}
<?xml version="1.0"?>
<project name="Test Ant" default="run" basedir=".">
<target name="compile">
<javac srcdir="${basedir}/src" destdir="${basedir}/classes"/>
</target>
<target name="run" depends="compile">
<java classname="test.Main" classpath="${basedir}/classes"/>
</target>
</project>
cd D:\antTest
ant
# 輸出:
# Buildfile: build.xml
# compile:
# run:
# [java] Test Ant
# BUILD SUCCESSFUL
<property file="build.properties"/> 區分環境差異<fileset>、<patternset> 靈活包含/排除檔案<condition>、<available>、<uptodate><junit> Task + <formatter> 產生報表org.apache.tools.ant.Task 擴充功能| 陷阱 | 解決方案 |
|---|---|
| 硬編碼路徑 | 全面使用 ${property},支援多環境部署 |
| Target 依賴循環 | 仔細設計 DAG,避免 A→B→A |
| 編碼問題 | <javac encoding="UTF-8"/> 統一編碼 |
| Classpath 混亂 | 用 <path id="compile.classpath"> 集中管理 |
| 增量建構失效 | 確保 Task 正確設定輸入/輸出檔案時間戳比對 |
Ant 雖非最新建構工具(Maven、Gradle 後起之秀),但其簡單、透明、可控的特性,使其在維護舊專案、嵌入式建構、輕量級自動化腳本中依然不可替代。掌握 build.xml 編寫核心技巧,配合官方文件深入探索,即能駕馭 Java 專案自動化建構全流程。