我正在使用 Maven 3.1.1 和exec-maven-plugin
(1.3) 以便在构建作业期间执行 bash 脚本。
stdout
bash 脚本在withecho
和上产生输出printf
。我注意到脚本的输出不会立即写入 maven 控制台输出。相反,maven 控制台输出“冻结”,直到它一次被 bash 脚本的多个输出行更新。我不知道更新 maven 输出的触发器是什么(超时?完整的输出缓冲区?)但它很慢。
让我们看一个非常简单的 bash 脚本,例如counter.sh
:
#!/usr/bin/env bash
for i in `seq 1 1000`; do
echo $i
sleep 0.5
done
这是我的插件配置pom.xml
:
<plugin>
<artifactId>exec-maven-plugin</artifactId>
<groupId>org.codehaus.mojo</groupId>
<version>1.3</version>
<executions>
<execution>
<id>execute-script</id>
<phase>package</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<executable>${project.build.directory}/executable/counter.sh</executable>
</configuration>
</execution>
</executions>
</plugin>
当我使用 执行构建作业时mvn clean package
,maven 输出冻结在exec-maven-plugin
并且没有显示进度/输出,直到脚本在大约 8 分钟后完成。
当我执行另一个运行时间更长的脚本时,我每 15 分钟就会得到一个输出块。
我正在寻找的是一种在 maven 控制台输出中即时查看 bash 脚本输出的方法。
更新:使用 maven-antrun-plugin 的解决方案(感谢 Ivan)
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.7</version>
<executions>
<execution>
<id>execute-script</id>
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<exec dir="${project.basedir}" executable="${project.build.directory}/executable/counter.sh" />
</target>
</configuration>
</execution>
</executions>
</plugin>