1. 概述
Maven 和 Ant 都是 Java 生态中广为人知的构建自动化工具。虽然大多数项目只会选择其一,但在某些场景下,两者结合使用反而更合理。
✅ 典型场景:接手一个老旧的 Ant 项目,想逐步迁移到 Maven,但又不想一次性重写所有构建逻辑。这时候保留部分关键 Ant 任务,通过 Maven 统一调度,就是一种简单粗暴且安全的过渡方案。
本文将介绍如何通过 Maven Antrun Plugin 实现这一目标。
2. Maven Antrun Plugin 简介
Maven Antrun Plugin 的作用是在 Maven 构建流程中嵌入执行 Ant 任务。
⚠️ 虽然这个插件长期未更新(最新版仍是 1.8),但在实际项目中依然稳定可用,尤其适合过渡期的混合构建需求。
2.1 插件引入
在 pom.xml
中添加插件声明即可:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<executions>
<!-- 具体执行配置 -->
</executions>
</plugin>
📌 插件最新版本可参考 Maven Central。
2.2 配置插件执行(executions)
和其他 Maven 插件一样,Antrun 插件也需要通过 <executions>
定义何时执行。
下面这个例子展示了:在 package
阶段,将生成的 JAR 包打包成 ZIP 文件。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<id>zip-artifacts</id>
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<zip destfile="${project.basedir}/package.zip"
basedir="${project.build.directory}"
includes="*.jar" />
</target>
</configuration>
</execution>
</executions>
</plugin>
执行命令:
mvn package
✅ 由于插件绑定到了 package
阶段,所以运行 mvn package
时会自动触发 ZIP 打包操作。
📌 注意:<target>
标签内是标准 Ant 语法,可以直接使用 Ant 的所有内置任务(如 copy
、delete
、mkdir
、exec
等)。
3. 使用外部 build.xml 文件
除了直接在 pom.xml
写 Ant 任务,Antrun 插件还支持调用独立的 build.xml
文件,这对已有 Ant 脚本的项目非常友好。
3.1 示例 build.xml
假设项目根目录下有一个 build.xml
,用于将 ZIP 文件上传到 FTP 服务器:
<project name="MyProject" default="dist" basedir=".">
<description>项目构建脚本</description>
<target name="ftpArtifact">
<ftp
server="${ftp.host}"
userid="${ftp.user}"
password="${ftp.password}">
<fileset dir="${project.basedir}">
<include name="**/*.zip" />
</fileset>
</ftp>
</target>
</project>
⚠️ 注意:<ftp>
是 Ant 的可选任务(optional task),默认不在 ant.jar
中,需要额外引入依赖。
3.2 插件配置调用 build.xml
在 pom.xml
中配置插件执行,调用外部 build.xml
的 ftpArtifact
目标:
<execution>
<id>deploy-artifact</id>
<phase>install</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<ant antfile="${basedir}/build.xml">
<target name="ftpArtifact"/>
</ant>
</target>
</configuration>
</execution>
📌 关键点:
- 使用
<ant antfile="...">
指定外部构建文件 - 通过
<target name="..."/>
指定要执行的目标
同时,必须添加 FTP 任务所需的依赖:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<executions>
<!-- 上面的 execution 配置 -->
</executions>
<dependencies>
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>1.4.1</version>
</dependency>
<dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant-commons-net</artifactId>
<version>1.8.1</version>
</dependency>
</dependencies>
</plugin>
执行命令:
mvn install
✅ 构建会走到 install
阶段时,自动加载 build.xml
并执行 ftpArtifact
任务。
💡 小贴士:FTP 凭据可通过 settings.xml
或命令行 -Dftp.user=admin -Dftp.password=secret
传入,避免硬编码。
4. 总结
通过 Maven Antrun Plugin,我们可以在 Maven 项目中灵活调用 Ant 任务,无论是内联脚本还是复用现有 build.xml
,都能轻松实现。
✅ 适用场景:
- 老项目从 Ant 向 Maven 迁移
- 团队部分成员熟悉 Ant,保留已有脚本
- 某些特殊构建步骤(如 FTP 上传、复杂文件处理)Ant 更简洁
❌ 不建议长期使用:
- Antrun 插件功能单一,维护性不如原生 Maven 插件
- 混合构建逻辑可能增加理解成本
📌 最终目标仍是尽可能将构建逻辑统一到 Maven 或 Gradle 中,但 Antrun 提供了一个平滑过渡的桥梁。
想了解更多构建工具对比?推荐阅读我们的 《Ant、Maven 与 Gradle 对比分析》 一文。