maven-antrun-plugin通过ant的exec任务执行shell命令,需绑定到具体生命周期阶段(如package),支持跨平台命令分支、maven属性引用及失败策略配置。

在 Maven 中使用 antrun 插件执行 Shell 命令,本质是借助 Ant 的 exec 任务调用系统命令。它适合做构建前/后的一次性脚本操作(比如清理临时文件、生成版本号、调用本地 CLI 工具),但不推荐替代真正的构建逻辑。
配置 antrun 插件绑定到生命周期阶段
把插件声明放在 <build><plugins></plugins></build> 下,并指定 <phase></phase>(如 generate-sources、package 或 verify),确保它在合适时机运行:
- 常用阶段:
initialize(初始化)、compile(编译后)、package(打包前)或post-clean(清理后) - 避免绑定到
default阶段,需明确指定生命周期阶段名 - 多个
<execution></execution>可分别绑定不同阶段,实现多点触发
在 goals 中写 exec 任务调用 Shell
在 <configuration><target></target></configuration> 内使用 <exec></exec>,注意平台兼容性:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- Linux/macOS:用
sh -c "your command",例如:<exec executable="sh"><arg value="-c"></arg><arg value="echo 'build on $(date)' > build.log"></arg></exec> - Windows:改用
cmd /c,例如:<exec executable="cmd"><arg value="/c"></arg><arg value="echo hello & date > log.txt"></arg></exec> - 跨平台建议:用
<os family="unix"></os>或<os family="winnt"></os>包裹不同命令分支
传递 Maven 属性和项目路径给 Shell
Ant 能直接引用 Maven 属性(如 ${project.build.directory})和系统变量(如 ${java.home}):
- Shell 命令中用
${...}即可展开,例如:sh -c "mkdir -p ${project.build.directory}/tmp" - 若命令含空格或特殊字符,建议用
<arg line="..."></arg>或拆成多个<arg value="..."></arg> - 注意:Maven 属性在插件执行时已解析,无需额外配置 property 元素
处理失败和日志输出
默认命令失败会中断构建,可通过属性控制行为:
- 加
failonerror="false"让构建继续(适合非关键脚本) - 加
outputproperty="cmd.output"捕获输出,后续用<echo></echo>打印或存入文件 - Maven 日志级别影响可见性:用
-X运行可看到详细 Ant 执行过程










