Ant
→ 返回构建工具
Apache Ant 是 Java 最早的主流构建工具(2000 年发布),基于 XML 描述构建任务,灵活但无内置约定。现多见于遗留项目,新项目推荐使用 Maven 或 Gradle。
核心概念
| 概念 | 说明 |
|---|---|
| Project | 构建的顶层容器,对应整个 build.xml |
| Target | 构建目标,可设置依赖关系 |
| Task | 具体执行的操作,如编译、复制、打包 |
| Property | 变量,可在文件或命令行中定义 |
build.xml 基本结构
<project name="my-app" default="build" basedir=".">
<property name="src.dir" value="src"/>
<property name="build.dir" value="build"/>
<property name="dist.dir" value="dist"/>
<target name="init">
<mkdir dir="${build.dir}/classes"/>
<mkdir dir="${dist.dir}"/>
</target>
<target name="compile" depends="init">
<javac srcdir="${src.dir}"
destdir="${build.dir}/classes"
includeantruntime="false">
<classpath>
<fileset dir="lib" includes="*.jar"/>
</classpath>
</javac>
</target>
<target name="jar" depends="compile">
<jar destfile="${dist.dir}/my-app.jar"
basedir="${build.dir}/classes">
<manifest>
<attribute name="Main-Class" value="com.example.Main"/>
</manifest>
</jar>
</target>
<target name="clean">
<delete dir="${build.dir}"/>
<delete dir="${dist.dir}"/>
</target>
<target name="build" depends="compile,jar"/>
</project>常用 Task
| Task | 说明 |
|---|---|
<javac> | 编译 Java 源码 |
<jar> / <war> | 打包 |
<copy> / <delete> | 文件操作 |
<mkdir> | 创建目录 |
<echo> | 打印信息 |
<exec> | 执行外部命令 |
<junit> | 运行 JUnit 测试 |
<zip> / <unzip> | 压缩/解压 |
常用命令
ant # 执行默认 target
ant compile # 执行指定 target
ant clean build # 执行多个 target
ant -f other.xml # 指定 build 文件
ant -Denv=prod # 传入属性
ant -p # 列出所有可用 targetIvy 依赖管理
Ant 本身不管理依赖,可结合 Apache Ivy 实现:
<!-- ivy.xml -->
<ivy-module version="2.0">
<info organisation="com.example" module="my-app"/>
<dependencies>
<dependency org="junit" name="junit" rev="4.13.2" conf="test->default"/>
</dependencies>
</ivy-module>与 Maven/Gradle 对比
| 特性 | Ant | Maven | Gradle |
|---|---|---|---|
| 约定优于配置 | ✗ | ✓ | ✓ |
| 内置依赖管理 | ✗(需 Ivy) | ✓ | ✓ |
| 灵活性 | 极高 | 低 | 高 |
| 现代项目推荐 | ✗ | ✓ | ✓ |