在Ant中,如何抑制exec错误“CreateProcess error = 2”?

时间:2011-01-18 23:07:57

标签: ant exec

我正在尝试执行一个程序,如果失败了,我有一个回退方法来获取所需的信息。并非所有使用此构建脚本的人都将安装该程序。我的任务如下:

<exec executable="runMe"
      failonerror="false"
      failifexecutionfails="false"
      outputproperty="my.answer"
      errorproperty="my.error"
      error="myerror.txt" />

显然我误解了Ant手册,因为我认为通过设置错误或errorproperty错误将被重定向并且不会显示在屏幕上。

是否可以隐藏消息“执行失败:java.io.IOException:无法运行程序”runMe“...”?

或者,有没有办法确定该程序是否可以运行而不用检查它的存在?如果程序在用户的系统上,它将不会在用户与用户之间的相同位置。

谢谢,

2 个答案:

答案 0 :(得分:1)

尝试使用ant-contrib的try / catch / finally命令。

http://ant-contrib.sourceforge.net/tasks/tasks/trycatch.html

答案 1 :(得分:0)

这样做的目的是在Ant中获取我的项目的Subversion修订版。一些开发人员安装了命令行Subversion而其他开发人员没有安装,所以我需要一种方法来测试svnversion的存在。

最后,我使用批处理文件来测试命令:

REM File checkCommand.bat
@echo off
%1 >NUL 2 >NUL
if errorlevel 1 goto fail

REM command succeeded 
exit 0

:fail
REM command failed
exit 1

在我的Ant目标中,我这样运行:

<target name="checkForSvnversion">
  <local name="cmdresult" />
  <exec dir="." executable="com"
        resultproperty="cmdresult"
        failonerror="false"
        failifexecutionfails="false">
      <arg line="/c checkCommand.bat svnversion" />
  </exec>

  <condition property="exec.failed">
    <equals arg1="${cmdresult}" arg2="1" trim="true" />
  </condition>
</target>

我有两个依赖于此结果的目标:

<target name="getRevisionFromSvnversion" depends="checkForSvnversion"
        unless="exec.failed">
  etc etc
</target>

<target name="getRevisionFromEntries" depends="checkForSvnversion"
        if="exec.failed">
  etc etc
</target>

最后,我要求修改的任务是:

<target name="getRevision"
        depends="getRevisionFromSvnversion,getRevisionFromEntries">
  <echo>My rev is ${svn.revision}</echo>
</target>