我正在使用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现在返回,我必须停止构建
我想做以下事情:
知道如何让他返回价值并让蚂蚁构建失败吗?
如果以详细模式(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)
该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任务立即失败.