Ant 是基於 Java 的跨平台建構工具。對比 Make:語法更簡潔 (XML)、跨平台、功能更強大、可透過開發自定義 Task 擴充。
JAVA_HOME、PATH、CLASSPATHhttps://www.apache.org/,解壓至簡單路徑 (如 D:\ant-1.6)ANT_HOME,將 %ANT_HOME%\bin 加入 PATHant,顯示 Buildfile: build.xml does not exist! 即成功project/
├── build.xml
└── src/
└── test/
└── ant/
└── HelloWorld.java
HelloWorld.javapackage test.ant;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello world1");
}
}
build.xml 完整版<?xml version="1.0" encoding="UTF-8"?>
<project name="HelloWorld" default="run" basedir=".">
<property name="src" value="src"/>
<property name="dest" value="classes"/>
<property name="hello_jar" value="hello1.jar"/>
<target name="init">
<mkdir dir="${dest}"/>
</target>
<target name="compile" depends="init">
<javac srcdir="${src}" destdir="${dest}"/>
</target>
<target name="build" depends="compile">
<jar jarfile="${hello_jar}" basedir="${dest}"/>
</target>
<target name="run" depends="build">
<java classname="test.ant.HelloWorld" classpath="${hello_jar}"/>
</target>
<target name="clean">
<delete dir="${dest}"/>
<delete file="${hello_jar}"/>
</target>
<target name="rerun" depends="clean,run">
<ant target="clean"/>
<ant target="run"/>
</target>
</project>
<project>:根元素,default 指定預設目標,basedir 為工作根目錄<property>:變數定義,${var} 引用<target>:任務單元,depends 宣告依賴,Ant 自動按拓撲序執行<javac>/<jar>/<java>/<delete>/<mkdir>:內建 Taskant # 執行 default target (run)
ant build # 僅打包 JAR
ant clean # 清理產出物
ant rerun # 清理後完整重建並執行
三個小組各自維護模組 (src1/src2/src3),各有獨立 build.xml。主專案需整合打包。
build.xml (調用子專案)<project name="main" default="build" basedir=".">
<property name="bin" value="${basedir}\bin"/>
<property name="src1" value="${basedir}\src1"/>
<property name="src2" value="${basedir}\src2"/>
<property name="src3" value="${basedir}\src3"/>
<target name="init">
<mkdir dir="${bin}"/>
</target>
<target name="run">
<ant dir="${src1}" target="run"/>
<ant dir="${src2}" target="run"/>
<ant dir="${src3}" target="run"/>
</target>
<target name="clean">
<ant dir="${src1}" target="clean"/>
<ant dir="${src2}" target="clean"/>
<ant dir="${src3}" target="clean"/>
</target>
<target name="build" depends="init">
<copy todir="${bin}">
<fileset dir="${src1}"><include name="*.jar"/></fileset>
<fileset dir="${src2}"><include name="*.jar"/></fileset>
<fileset dir="${src3}"><include name="*.jar"/></fileset>
</copy>
</target>
<target name="rebuild" depends="clean,build"/>
</project>
all.properties 提取路徑配置src1=D:\study\ant\src1
src2=D:\study\ant\src2
src3=D:\study\ant\src3
<property file="all.properties"/>
include.xml 共享 Property 與 Target<?xml version="1.0" encoding="UTF-8"?>
<property name="src" value="src"/>
<property name="dest" value="classes"/>
<target name="test">
<ant target="run"/>
</target>
子專案 build.xml 引入:
<!DOCTYPE project [
<!ENTITY share-variable SYSTEM "file:../include.xml">
]>
<project ...>
&share-variable;
<property name="hello_jar" value="hello1.jar"/>
...原有 target...
</project>
修改 include.xml 即可同步更新所有子專案的共用屬性與目標,維護極致簡便。
<property name="cvsroot" value=":pserver:wang:@192.168.1.2:/cvsroot"/>
<property name="cvs.password" value="wang"/>
<property name="cvs.passfile" value="${basedir}/ant.cvspass"/>
<target name="initpass">
<cvspass cvsroot="${cvsroot}" password="${cvs.password}" passfile="${cvs.passfile}"/>
</target>
<target name="checkout" depends="initpass">
<cvs cvsroot="${cvsroot}" command="checkout" cvsrsh="ssh"
package="myproject" dest="${basedir}" passfile="${cvs.passfile}"/>
</target>
Eclipse 內建 Ant 支援:新建專案 → 建立 build.xml → 享受語法提示、自動完成、大綱視圖。強烈建議在 Eclipse 中編寫/維護 Ant 腳本。
build.xml (Spring、Hibernate、Struts 等)https://ant.apache.org/manual/,Task 參考極詳盡Ant 掌握度與實戰經驗成正比。從簡單腳本開始,逐步引入依賴管理、多模組整合、配置外部化、自定義 Task,將建構腳本打磨為專案自動化的核心資產。