Ant exec resultproperty不工作

Ant exec resultproperty不工作,ant,build,Ant,Build,我正在使用Antexec任务调用批处理文件,并在resultproperty中设置结果。但是Ant永远不会得到回报值。下面是我的代码 <property name="BuildErrorCode" value="abc"/> <exec executable="cmd" resultproperty="BuildErrorCode" failonerror="false" dir="C:\workspace\build\"> <arg value

我正在使用Ant
exec
任务调用批处理文件,并在
resultproperty
中设置结果。但是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}" />
当脚本运行时,我总是从批处理文件中获取
abc
作为值,而不是返回值。我的批处理文件现在返回
2
,我必须停止构建

我想做以下工作:

  • 如果返回值为0,那么我必须使构建失败,而这现在还没有发生

  • 知道如何获取返回值并使ant构建失败吗?

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

    Override ignored for property "BuildErrorCode"
    
    本质上,一旦设置了ant属性,就不能更改其值。这有很多细节

    一种可能的解决方法是不
    声明该属性

        ...
        <!--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>
        ...
    
    。。。
    ...
    
    执行任务
    resultproperty
    将捕获cmd解释器的退出代码。在批处理文件中调用exit的方式虽然不是终止cmd,但只是退出脚本。cmd的退出代码将不受影响,并保持为零。如果您只是删除exit命令的
    \b
    选项,那么您也将终止解释器,并看到您提供的已传播的退出代码

    if %errorlevel% neq 0 exit %errorlevel%
    
    要想失败,你可以用一个,也许是这样的方法:

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

    或者您可以将执行任务中的
    failonerror=“true”
    设置为立即失败。

    谢谢Raghuram。现在,我得到值0,即使我需要得到2。我将再次检查批处理文件。thanksOK另一件事是,我可以在ANT Build.xml中使用retun值做什么,以使ANT构建报告成为FailureAnks Martin。
    退出%errorlevel%
    现在可以工作了。我可以在ANT中获得值。
    工作得非常好。我能够将构建报告为失败,这正是我想要的。谢谢大家。这样做的缺点是,如果您直接运行批处理文件进行测试,它将终止您的shell。您可以在批处理文件中使用if和arg在ant调用时选择\b,在不调用时选择正常退出。来自
    cmd
    的退出代码应该是最后运行的脚本的退出代码,因此
    exit/b
    exit
    应该具有完全相同的效果。知道蚂蚁在做什么来打破这个吗?
    <fail message="cmake_cross_compile.bat exited non-zero">
        <condition>
           <not>
             <equals arg1="${BuildErrorCode}" arg2="0"/>
           </not>
         </condition>
    </fail>