我有一个从Ant exec任务调用的批处理脚本来编译一些CSharp代码。批处理脚本按以下方式构建
msbuild.exe %ARGS%
echo %ERRORLEVEL%
现在,当任务在Ant中运行时,我得到以下结果:
[exec] Time Elapsed 00:00:09.48
[exec] 0
BUILD FAILED
C:\proj\build.xml:410: exec returned: 2
%ERRORLEVEL%如何可能为0,但Ant exec的返回码为2?如果命令没有返回代码,这是否设置了一些默认错误代码? Ant文档显示:
error code 2 means 'no such program',
但显然我的批处理文件正在正确执行。
使用Ant代码进行更新
<target name="build.csharp" if="isWindowsPlatform">
<exec executable="cmd.exe" failOnError="true">
<arg value="/c"/>
<arg value="build.csharp.bat" />
</exec>
</target>
答案 0 :(得分:1)
错误和返回代码
默认情况下,忽略
<exec>
的返回码;当您设置failonerror="true"
时,任何返回代码信令失败(特定于操作系统)都会导致构建失败。或者,您可以将resultproperty
设置为属性的名称,并将其分配给结果代码(当然,除非不变性)。如果启动程序的尝试因操作系统相关的错误代码而失败,则
<exec>
会暂停构建,除非failifexecutionfails
设置为false
。您可以使用它来运行程序(如果存在),否则不执行任何操作。这些错误代码是什么意思?嗯,他们依赖于操作系统。在Windows框中,您必须查看文档;错误代码2表示“没有这样的程序”,这通常意味着它不在路径上。每当您从任何Ant任务中看到这样的错误时,它通常不是Ant错误,而是您计算机上的某些配置问题。
要获取程序的返回代码,您需要使用exec task的 resultproperty 属性。
答案 1 :(得分:1)
我跑了一堆排列。我试过了:
exit %errorlevel%
exit /b %errorlevel%
@comspec /c exit %errorlevel%
允许ant查看正确错误代码的唯一技术是exit %errorlevel%
。虽然脚本现在可以正常工作,但有点烦人,因为直接从命令shell运行它会导致shell随后退出。 (通过cmd /c
调用脚本有效,但很麻烦。)
我很乐意来自DOS专家,他可以解释这些结果并对其进行扩展。感谢。
答案 2 :(得分:1)
ANT wiki中有一篇关于此行为的文章,包括一个解决方案: http://wiki.apache.org/ant/AntOnWindows