Как выполнить сбой ant-скрипта, если задача exec завершается с ошибкой

#ant #scripting #exit

#ant #сценарии #выход

Вопрос:

Я выполняю ant-скрипт в Windows. Учитывая это, я выполняю dir команду в exec задаче, как показано ниже

 <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 , это выполнение завершится неудачей. но сборка ant не завершается сбоем. Отображается сообщение об ошибке as dirr is not recognised as internal or external command , и следующая команда cd /d c:temp также была выполнена. Я хочу, чтобы выполнение ant-скрипта было остановлено после появления сообщения об ошибке.

Я хочу, чтобы этот скрипт прекратил выполнение, если в какой-либо из команд exec произошла ошибка. failonerror также не помогает. Как выполнить сбой сборки ant, если exec завершается с ошибкой.

Примечание: я использую ant 1.8.2

Комментарии:

1. build: [exec] 'DIRR' is not recognized as an internal or external command, [exec] operable program or batch file. BUILD FAILED Отлично работает на моем компьютере. Я не уверен, что вы получаете.

2. Можете ли вы предоставить весь файл сборки целиком? Я запускаю ваш пример, и он отлично работает на моем компьютере. ant 1.8.2

3. @FailedDev изменил мой вопрос.

4. Он по-прежнему работает так, как ожидалось, то есть завершается сбоем при первой ошибке, и скрипт останавливается именно там.

5. @rajaashok Пример работает и для меня, как вы хотите — он останавливается после первого вызова. Версия Ant: 1.8.2. Вы можете исправить опечатку в своем сообщении: <имя цели =»фиктивный»>.

Ответ №1:

Пожалуйста, обратите внимание, что здесь есть два уровня исполнения:

  • Муравей зовет cmd.exe .
  • cmd.exe выполняет DIRSS .

Видите ли, если второй шаг завершается неудачей, это не обязательно означает, что cmd.exe ошибка распространяется обратно на Ant. Это может быть более очевидным, если мысленно заменить общеизвестное cmd.exe на что-то «невинное» вроде foo.exe .

Итак, следующий шаг — выяснить, почему второй шаг ведет себя на вашей машине иначе, чем на машинах комментаторов вашего вопроса. После того, как эта загадка будет решена, вы можете вернуться к вопросу о Муравьях.

Первым шагом может быть следующее: откройте новое окно командной строки и попробуйте

 > cmd /c dir
> echo %ERRORLEVEL%

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

> cmd /c dirr
> echo %ERRORLEVEL%
 

Также сообщите нам версию вашей операционной системы.

Комментарии:

1. Я никогда не видел, чтобы что-то терпело неудачу, как это. Я имею в виду, что он должен завершиться с ошибкой на всех или ни на одном компьютере с Windows, если не выполняется какое-либо волшебство.

2. @FailedDev: В конце концов, «волшебная часть» оказывается dirr.exe где-то на пути 🙂 Я бы ROTFL.

3. 1, если это является причиной. 🙂 Я буду внимательно следить за этим вопросом. Я использую ant, как орехи, но еще не видел такой ошибки!