Ant

返回构建工具

Apache Ant 是 Java 最早的主流构建工具(2000 年发布),基于 XML 描述构建任务,灵活但无内置约定。现多见于遗留项目,新项目推荐使用 MavenGradle


核心概念

概念说明
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               # 列出所有可用 target

Ivy 依赖管理

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 对比

特性AntMavenGradle
约定优于配置
内置依赖管理✗(需 Ivy)
灵活性极高
现代项目推荐

Maven · Gradle · 依赖管理