Maven 插件 maven-antrun-plugin 执行 ant 脚本

Ant 相信大家都不陌生,你可以把它理解为使用 xml 格式描述的一系列命令处理工具。它是一种基于Java的build工具。理论上来说,它有些类似于(Unix)C中的make、有些类似于基于shell命令编写的sh脚本文件。Ant 用 Java 的类来扩展。(用户)不必编写 shell 命令,而是基于XML配置文件的,通过调用 target 树,就可执行各种 ant task。每个 task 由实现了一个特定 Task 接口的对象来运行。

常规来说 Ant 是需要独立运行库来运行,相当于要下载一个类似于 tomcat 这样的包并进行配置后才可以使用。而现在的项目我们大多数基于 Maven 构建,如果你希望在编译项目的过程中(编译前中后通过 phase 控制)做相应的处理操作(自动生成文件、替换项目代码中的常量值、执行相关命令等),那么可以通过本文所述插件 maven-antrun-plugin 来将 maven 构建和 ant 脚本的运行有效结合起来,该插件配置即用不需要下载额外的运行库。

下面是一个简单的示例,演示了 "自动生成 Version.java 文件,然后替换文件中的变量值" 的场景:

xml 复制代码
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>3.1.0</version>
    <executions>
        <execution>
            <goals>
                <goal>run</goal>
            </goals>
            <phase>generate-sources</phase>
            <configuration>
                <target>
                    <property name="src.dir" value="${project.build.sourceDirectory}"/>
                    <property name="package.dir" value="com/shanhy/demo"/>
                    <property name="package.name" value="com.shanhy.demo"/>
                    <property name="buildtime" value="${maven.build.timestamp}"/>

                    <echo file="${src.dir}/${package.dir}/Version.java"
                          message="package ${package.name};${line.separator}${line.separator}"/>
                    <echo file="${src.dir}/${package.dir}/Version.java" append="true"
                          message="public final class Version {${line.separator}"/>
                    <echo file="${src.dir}/${package.dir}/Version.java" append="true"
                          message="    public static String NUMBER = &quot;${project.version}&quot;;${line.separator}"/>
                    <echo file="${src.dir}/${package.dir}/Version.java" append="true"
                          message="    public static String BUILD_TIME = &quot;${buildtime}&quot;;${line.separator}"/>
                    <echo file="${src.dir}/${package.dir}/Version.java" append="true"
                          message="}${line.separator}"/>
                    <replace file ="${src.dir}/${package.dir}/Version.java" token="-SNAPSHOT"
                             value="" />
                </target>
            </configuration>
        </execution>
    </executions>
</plugin>

示例旨在抛砖引玉的意义,能有效理解该插件的实际作用和使用方法,至于你希望运行更复杂的业务处理或者运行更多的脚本内容,你都可以在 <target></target> 节点中编写任意 ant 脚本内容,或者参考插件官方使用文档,指定一个独立外置的 build.xml 文件来执行 ant 脚本。

插件的官方使用文档地址:https://maven.apache.org/plugins/maven-antrun-plugin/usage.html

Ant 语法官方使用手册地址: https://ant.apache.org/manualdownload.cgi


(END)

相关推荐
木井巳2 分钟前
【JavaEE】SpringBoot 统一功能处理: 拦截器、统一返回与全局异常
java·spring boot·后端·spring·java-ee
SL-staff5 分钟前
JVS-Rules金融风控实践:四大原生能力的技术实现与可落地配置指南
java·决策树·规则引擎·函数计算·金融风控·jvs-rules·数据源抽象
Thomas.Sir34 分钟前
第6课:SpringBoot4.x 核心注解全解:Component、Bean、Scope、Lazy等IOC相关注解
java·spring boot
paopaokaka_luck36 分钟前
美食推荐系统(协同过滤算法推荐、AI助手、HanLP中文分词、 ECharts可视化分析、菜谱学习与话题交流)
java·spring boot·mysql·tomcat·echarts
开源推荐官37 分钟前
2026 年开源商城源码选型参考:技术栈、功能与适用场景梳理
java·架构·开源
sunburn-1 小时前
数据库操作完整教程:从基础到实战
java·数据库·mysql
文丑颜不良啊1 小时前
LeetCode576~600题目解析
java·leetcode
Linux运维技术栈1 小时前
CVE-2026-91403 高危漏洞预警:Java JSSE 信任链被攻破 全场景修复方案与Linux系统级彻底清理实操
java·linux·安全·jdk·信任链
秋饼1 小时前
Spring AI + MCP 工具调用可靠性实战:参数校验、权限防线与人工确认生产级落地
java·ai·技术分享·后端开发
步行cgn1 小时前
RESTful 是什么?怎么记住它?
java