如果 exec 任务失败,如何使 ant 脚本失败

Posted

技术标签:

【中文标题】如果 exec 任务失败,如何使 ant 脚本失败【英文标题】:How to fail the ant script, if exec task fails 【发布时间】:2011-10-31 06:40:54 【问题描述】:

我正在 Windows 中执行 ant 脚本。考虑到这一点,我正在exec 任务中执行dir 命令,如下所示

<target name="dummy">
  <exec executable="cmd" failonerror="true">
    <arg line="/C DIRR"/>
  </exec>
  <exec executable="cmd" failonerror="true">
    <arg line="/C cd /d c:\temp"/>
  </exec>
</target>

这里我给了DIRR而不是DIR,这个执行会失败。但蚂蚁构建并没有失败。它显示错误消息为dirr is not recognised as internal or external command,并且下一个命令cd /d c:\temp 也被执行。我希望一旦出现错误消息就必须停止执行 ant 脚本。

如果任何一个 exec 命令发生错误,我希望这个脚本必须停止执行。 failonerror 也无济于事。如果 exec 失败,如何使 ant 构建失败。

注意:我使用的是 ant 1.8.2

【问题讨论】:

build: [exec] 'DIRR' is not recognized as an internal or external command, [exec] operable program or batch file. BUILD FAILED在我的电脑上工作得很好。我不确定你得到了什么。 你能提供整个构建文件吗?我运行您的示例,它在我的电脑上运行良好。蚂蚁 1.8.2 @FailedDev 修改了我的问题。 它仍然按预期工作,即它在第一个错误时失败并且脚本正好停在那里。 @rajaashok 该示例也适用于我,如您所愿 - 它在第一次通话后停止。蚂蚁版本:1.8.2。您可以修复帖子中的打印错误:. 【参考方案1】:

请注意,这里有两个级别的执行:

蚂蚁调用cmd.execmd.exe 执行 DIRSS

你看,如果第二步失败,这并不一定意味着cmd.exe 确实会将错误传播回 Ant。如果将众所周知的cmd.exe 替换为像foo.exe 这样的“无辜”的东西,这可能会更明显。

所以下一步是探索为什么第二步在您的机器上的行为与在您的问题评论员的机器上的行为不同。解开这个谜题后,你就可以回到蚂蚁的问题了。

第一步可能是这样:打开一个新的 shell 窗口并尝试

> cmd /c dir
> echo %ERRORLEVEL%

> cmd /c dir nonexisting-directory
> echo %ERRORLEVEL%

> cmd /c dirr
> echo %ERRORLEVEL%

还请告诉我们您的操作系统版本。

【讨论】:

我从未见过像这样失败的事情。我的意思是它应该在所有或没有 Windows 机器上都失败,除非正在做一些魔法。 @FailedDev:最后,“神奇的部分”变成了路径中某处的dirr.exe :-) 我会 ROTFL。 +1 如果这是原因。 :) 我会仔细观察这个问题。我正在使用像坚果一样的蚂蚁,但还没有看到这样的错误!

以上是关于如果 exec 任务失败,如何使 ant 脚本失败的主要内容,如果未能解决你的问题,请参考以下文章

使用 Ant 任务为 Oracle 配置 worklight Server 失败

ANT脚本中的条件任务执行

如何从 Ant 'exec' 任务中导出环境变量?

如何通过bash脚本检测ant / maven的构建错误?

如何让 JUnit 测试(从 Ant 脚本驱动)转储导致失败的异常堆栈?

如何将 JUnit Ant 任务配置为仅在失败时生成输出?