首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何即时显示exec-maven-plugin的输出

如何即时显示exec-maven-plugin的输出
EN

Stack Overflow用户
提问于 2014-05-14 07:34:04
回答 3查看 8.1K关注 0票数 7

我使用Maven 3.1.1和exec-maven-plugin (1.3)在构建作业期间执行bash脚本。

bash脚本在stdout上使用echoprintf生成输出。我注意到脚本的输出不是即时写入maven控制台输出的。相反,maven控制台的输出“冻结”,直到它一次用bash脚本的多行输出进行更新。我不知道更新maven输出(超时)的触发器是什么?全输出缓冲器?)但速度很慢。

让我们使用一个非常简单的bash脚本,例如counter.sh

代码语言:javascript
复制
#!/usr/bin/env bash
for i in `seq 1 1000`; do
  echo $i
  sleep 0.5
done 

下面是我在pom.xml中的插件配置

代码语言:javascript
复制
<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)

代码语言:javascript
复制
<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>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-05-19 14:40:07

exec-maven-plugin使用的输出流不会自动刷新。

我想你有两个选择:

  1. 复制并更改exec-maven-plugin以满足您的需要。
  2. 使用antrun插件与蚂蚁执行任务。这确实会刷新输出流,这样您就可以在输出出现时看到它。请参阅http://sanchitbahal.wordpress.com/2011/09/19/maven-exec-plugin-vs-maven-antrun-plugin-for-running-command-line-tool/

也许第二个选项可能会慢一些,因为maven调用ant,ant然后调用您的脚本,但是非常容易。

票数 1
EN

Stack Overflow用户

发布于 2015-01-15 15:36:47

JFYI,这个问题在exec plugin v 1.3.2 - http://blog.soebes.de/blog/2014/07/28/mojo-exec-maven-plugin-version-1-dot-3-2-released/中得到修正。

票数 4
EN

Stack Overflow用户

发布于 2014-07-16 06:49:49

正如Ivan已经指出的,exec plugin:1.3不会自动刷新输出流。这可能导致产出延迟。

我注意到这种行为只出现在1.3版以后的插件中。

exec plugin:1.2.1实际上具有所需的行为并刷新输出流。因此,不使用ant,您可以切换到较早版本的exec plugin。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23648304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档