Ant exec resultproperty不工作
我正在使用AntAnt 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
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
,我必须停止构建
我想做以下工作:
知道如何获取返回值并使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>