为什么Ant Exec任务返回的代码与ERRORLEVEL值不匹配?

时间:2013-02-20 02:44:09

标签: java ant batch-file

我有一个从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>

3 个答案:

答案 0 :(得分:1)

ANT manual州:

  

错误和返回代码

     

默认情况下,忽略<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