В Ant, как я могу подавить ошибку exec "CreateProcess error = 2"? - PullRequest
1 голос
/ 19 января 2011

Я пытаюсь выполнить программу, и если это не удается, у меня есть запасной метод для получения необходимой информации.Не всем, кто использует этот скрипт сборки, будет установлена ​​программа.Моя задача имеет следующее:

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

Очевидно, я неправильно понимаю руководство по Ant, потому что я думал, что при установке error или свойства свойства error будет перенаправлена ​​и не будет отображаться на экране.скрыть сообщение "Ошибка выполнения: java.io.IOException: не удается запустить программу" runMe "..."?

Альтернативно, есть ли способ определить, можно ли запустить эту программу без проверяет его наличие?Если программа находится в системе пользователя, она не будет в том же месте от пользователя к пользователю.

Спасибо,

Пол

Ответы [ 2 ]

1 голос
/ 21 января 2011

Попробуйте команды ant-contrib try / catch / finally.

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

0 голосов
/ 24 января 2011

Целью этого было получить ревизию Subversion для моего проекта в Ant.У некоторых разработчиков установлена ​​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>
...