【问题标题】:Ant exec resultproperty is not workingAnt exec 结果属性不起作用
【发布时间】:2011-07-20 06:47:54
【问题描述】:

我正在使用 Ant exec 任务调用批处理文件并将结果设置为 resultpropery。但是返回值永远不会到达 Ant。下面是我的代码

<property name="BuildErrorCode" value="abc"/>
<exec executable="cmd" resultproperty="BuildErrorCode" failonerror="false"
      dir="C:\workspace\build\">
    <arg value="/c"/>
    <arg value="cmake_cross_compile.bat"/>
</exec>

<echo message="Error Code:=${BuildErrorCode}" />

我通过以下方式退出我的批处理脚本:

if %errorlevel% neq 0 exit /b %errorlevel%

当脚本运行时,我总是将abc 作为值而不是批处理文件的返回值。我的批处理文件现在返回2,我必须停止构建

我想做以下事情:

  1. 如果返回值为 0,那么我必须使构建失败,这现在不会发生。

知道如何让他返回值并使 ant 构建失败吗?

【问题讨论】:

    标签: ant build


    【解决方案1】:

    如果您以详细模式 (ant -v) 运行构建脚本,您会注意到这一行

    Override ignored for property "BuildErrorCode"
    

    基本上,一旦设置了 ant 属性,它的值就无法更改。这个SO question 有详细信息。

    一种可能的解决方法是不要declare 该属性。

        ...
        <!--property name="BuildErrorCode" value="abc"/-->
        <exec executable = "cmd" resultproperty="BuildErrorCode" failonerror="false" dir="D:\work">
            <arg value="/c"/>
            <arg value="cmake_cross_compile.bat"/>
        </exec>
        ...
    

    【讨论】:

    • 谢谢拉古拉姆。现在 atleats 我得到值 0 即使我需要得到 2。我将再次检查批处理文件。谢谢
    【解决方案2】:

    exec 任务resultproperty 将捕获 cmd 解释器的退出代码。您在批处理文件中调用 exit 的方式不是终止 cmd,它只是退出脚本。 cmd 的退出代码将不受影响,并保持为零。如果您只是删除 exit 命令的 \b 选项,您也会终止解释器并看到您提供的退出代码已传播。

    if %errorlevel% neq 0 exit %errorlevel%
    

    如果失败,您可以使用fail task,可能是这样的:

    <fail message="cmake_cross_compile.bat exited non-zero">
        <condition>
           <not>
             <equals arg1="${BuildErrorCode}" arg2="0"/>
           </not>
         </condition>
    </fail>
    

    或者您可以在exec 任务中设置failonerror="true" 立即失败。

    【讨论】:

    • OK 另一件事是,我可以在 ANT Build.xml 中使用 retun 值做什么来使 ANT 构建报告为失败
    • 谢谢马丁。 exit %errorlevel% 现在可以使用。我能够在 ANT.&lt;fail&gt; 中获得价值,工作得非常好。我能够将构建报告为失败,这正是我想要的。谢谢你们俩
    • 这样做的缺点是,如果您直接运行批处理文件进行测试,它将终止您的 shell。您可以在批处理文件中使用 if 和 arg 在 ant 调用它时选择 \b 并在不调用时正常退出。
    • cmd 的退出代码应该是最后运行的脚本的退出代码,所以exit /bexit 应该具有完全相同的效果。知道 Ant 正在做什么来打破这一点吗?
    猜你喜欢
    • 2012-10-16
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-18
    • 2021-12-27
    • 2014-01-23
    相关资源
    最近更新 更多