Maven Exec Plugin配置outputFile无法将命令输出写入文件
问题根因
两个配置失效的原因分别是:
- 你当前使用的
exec-maven-plugin版本为1.2,outputFile是1.3版本才新增的配置项,1.2版本不会识别该配置,自然不会把命令输出写入指定文件。 - 你测试的
echo "something" > file.txt写法失效,是因为>是Shell(Bash/Zsh/Windows Cmd等)提供的重定向语法,不属于操作系统原生命令的参数范畴。Exec插件默认直接调用配置的可执行程序,不会经过Shell解析命令,所以>会被当成普通字符串参数传给echo命令,不会触发文件写入逻辑。
可行解决方案
根据你的使用场景选一个即可:
- 升级插件版本使用原生输出配置
将插件版本从1.2升级到1.3以上的稳定版本(当前最新稳定版为3.1.0),升级后你之前编写的带outputFile的Git命令配置可以直接生效,不需要依赖外部脚本,修改后的插件核心配置如下:<groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>3.1.0</version> <!-- 其余原有依赖、execution配置保持不变即可 --> <configuration> <executable>git</executable> <outputFile>branching.txt</outputFile> <arguments> <argument>rev-parse</argument> <argument>--abbrev-ref</argument> <argument>HEAD</argument> </arguments> <workingDirectory>${basedir}</workingDirectory> </configuration> - 显式调用Shell执行带重定向的命令
如果你需要使用重定向、管道这类Shell语法,又不想维护独立的脚本文件,可以直接把Shell程序作为可执行入口,将完整命令作为参数传给Shell执行。Linux/macOS环境下配置示例如下:
Windows环境下把<configuration> <executable>bash</executable> <arguments> <argument>-c</argument> <argument>git rev-parse --abbrev-ref HEAD > branch.txt</argument> </arguments> <workingDirectory>${basedir}</workingDirectory> </configuration>executable改成cmd,第一个参数改成/c即可。如果需要跨平台兼容,可以结合Maven Profile做不同环境的配置切换。 - 保留原有独立Shell脚本的方案,这个方案不存在版本兼容、Shell语法解析的问题,稳定性最高,不想改配置的话可以继续使用。
内容的提问来源于stack exchange,提问作者Shahar Hamuzim Rajuan
相关产品推荐
相关产品推荐

