运行Ant exec任务而不用"结果:"输出

时间:2016-12-09 02:50:32

标签: ant exec

当Ant exec任务运行以非零退出状态完成的命令时,exec任务输出状态,例如:

 [exec] Result: 1

这是在没有上下文的情况下打印的,因此对用户来说很困惑。 即使使用outputproperty="someproperty" failonerror="false"调用exec任务,也会打印它。 我对grep之类的命令使用这样的调用,其中非零输出可能是期望的预期结果。

有没有办法压制"结果:"输出,而不对Ant进程的输出进行任何其他更改?

2 个答案:

答案 0 :(得分:1)

请查看以下使用JavaScript禁用和恢复日志记录的示例。

的build.xml

<project name="ant-exec-intentional-fail" default="run">
    <target name="run">
        <echo>Show that exec logs "Result: 1" by default...</echo>
        <exec executable="sh" failonerror="false">
            <arg value="-c"/>
            <arg value="exit 1"/>
        </exec>
        <echo>Disabling logging...</echo>
        <script language="javascript"><![CDATA[
            var savedLoggers = project.getBuildListeners();
            for( var i = 0; i < savedLoggers.length; i++ ) {
                var logger = savedLoggers[i];
                project.removeBuildListener( logger );
            }
            project.addReference( "savedLoggers", savedLoggers );
        ]]></script>
        <exec executable="sh" failonerror="false" resultproperty="middle-sh-result">
            <arg value="-c"/>
            <arg value="exit 42"/>
        </exec>
        <!-- Restore logging. -->
        <script language="javascript"><![CDATA[
            var savedLoggers = project.getReference( "savedLoggers" );
            for( var i = 0; i < savedLoggers.length; i++ ) {
                var logger = savedLoggers[i];
                project.addBuildListener( logger );
            }
        ]]></script>
        <echo>Verify logging works again...</echo>
        <exec executable="sh" failonerror="false">
            <arg value="-c"/>
            <arg value="exit 1"/>
        </exec>
        <echo>By the way, the middle exec returned: ${middle-sh-result}</echo>
    </target>
</project>

输出

run:
 [echo] Show that exec logs "Result: 1" by default...
 [exec] Result: 1
 [echo] Disabling logging...
 [echo] Verify logging works again...
 [exec] Result: 1
 [echo] By the way, the middle exec returned: 42

答案 1 :(得分:0)

迟到的答案 - 但也许它会帮助那些偶然发现这个问题的人在网上搜索并且不想完全禁用日志记录(如Chad Nouis建议的那样):如果在单独的shell中启动程序,退出代码可以是控制。

使用退出代码0忽略/覆盖:

<exec executable="sh">
  <arg value="-c" />
  <arg value="cmd-with-non-0-exit.sh || exit 0" />
</exec>

存储退出代码&lt;&gt; 0到财产:

<exec executable="sh" outputproperty="cmdOutput">
  <arg value="-c" />
  <arg value="cmd-with-non-0-exit.sh || echo $?" />
</exec>

然后可以从$cmdOutput解析退出代码。