Ant exec resultproperty不起作用

KK9*_*K99 8 ant build

我正在使用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}" />
Run Code Online (Sandbox Code Playgroud)

我退出我的批处理脚本:

if %errorlevel% neq 0 exit /b %errorlevel%
Run Code Online (Sandbox Code Playgroud)

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

我想做以下事情:

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

知道如何让他返回价值并让蚂蚁构建失败吗?

Rag*_*ram 8

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

Override ignored for property "BuildErrorCode"
Run Code Online (Sandbox Code Playgroud)

基本上一旦设置了一个ant属性,就不能改变它的值.这个问题有详细说明.

可能的解决方法是不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>
    ...
Run Code Online (Sandbox Code Playgroud)


mar*_*ton 7

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

if %errorlevel% neq 0 exit %errorlevel%
Run Code Online (Sandbox Code Playgroud)

要失败,您可以使用fail任务,也许是这样的:

<fail message="cmake_cross_compile.bat exited non-zero">
    <condition>
       <not>
         <equals arg1="${BuildErrorCode}" arg2="0"/>
       </not>
     </condition>
</fail>
Run Code Online (Sandbox Code Playgroud)

或者你可以设置failonerror="true"exec任务立即失败.