ant build.xml核心是project根元素定义项目,内含target目标及task任务;依赖通过depends声明,属性用property复用,路径用path管理,强调“做什么”而非“怎么做”。

写 Ant 的 build.xml 文件,核心是定义一个项目(<project></project>),再在里面组织若干目标(<target></target>),每个目标由一系列任务(<task></task>)组成。它不是编程语言,而是基于 XML 的配置式构建描述——重点在于“做什么”和“依赖关系”,而不是“怎么一步步算”。
基础结构:project 和 target 是骨架
每个 build.xml 必须有且仅有一个 <project></project> 根元素,至少包含 name、default(默认执行的目标)、basedir(工作目录,通常用 . 表示当前目录)属性:
<project name="my-app" default="compile" basedir=".">
<target name="compile">
<echo>Compiling source code...</echo>
</target>
</project>
运行 ant(不带参数)时,Ant 会自动执行 default="compile" 指定的目标。
常用任务:copy、javac、jar、clean 最常用
实际构建 Java 项目,离不开这几个任务。它们不是内置关键字,而是 Ant 自带的“任务实现”,开箱即用:
-
<javac srcdir="src" destdir="bin" includeantruntime="false"></javac>—— 编译src/下的 .java 到bin/,includeantruntime="false"避免把 ant.jar 打进 classpath -
<copy todir="dist/lib"><fileset dir="lib"></fileset></copy>—— 把lib/下所有 jar 复制到dist/lib -
<jar destfile="dist/my-app.jar" basedir="bin"></jar>—— 把bin/打成 jar 包 -
<delete dir="bin"></delete>或<delete><fileset dir="dist"></fileset></delete>—— 清理输出目录
目标依赖:用 depends 控制执行顺序
Ant 不按 XML 顺序执行 target,而是靠 depends 属性声明前置条件。比如“打包前必须编译,编译前必须清理”:
<target name="clean"> <delete dir="bin"/> <delete dir="dist"/> </target> <target name="compile" depends="clean"> <mkdir dir="bin"/> <javac srcdir="src" destdir="bin" includeantruntime="false"/> </target> <target name="package" depends="compile"> <mkdir dir="dist"/> <jar destfile="dist/my-app.jar" basedir="bin"/> </target>
此时运行 ant package,Ant 会自动先跑 clean → 再 compile → 最后 package。依赖支持多值,如 depends="init,compile,test"。
属性与路径:用 property 和 path 管理复用信息
避免硬编码路径或版本号。用 <property></property> 定义常量,用 <path></path> 组织 classpath:
-
<property name="src.dir" value="src"></property>,后面可用${src.dir} -
<property file="build.properties"></property>可外部加载 key=value 配置文件 <path id="compile.classpath"><fileset dir="lib"><include name="*.jar"></include></fileset></path>- 在
<javac></javac>中引用:classpathref="compile.classpath"
基本上就这些。写 build.xml 不复杂,但容易忽略依赖闭环、路径存在性检查(比如 <mkdir></mkdir> 在 <javac></javac> 前)、或 classpath 漏包。建议从一个最小可运行版本开始,逐步加功能。










