неубедительные ошибки - PullRequest
       8

неубедительные ошибки

4 голосов
/ 31 января 2009

У меня есть код ant, который запускает сборку релиза во всех подкаталогах:

<target name="all-release" >
    <subant target="sub-release" failonerror="true">
        <fileset dir="." includes="*/build.xml" />
    </subant>
</target>

Как написано, если какая-то отдельная сборка завершится неудачно, все выпуски будут терпеть неудачу быстро (ни одна из более поздних сборок не будет успешной. Если я переключу failonerror = "false", все выпуски будут успешны все время. все вспомогательные сборки независимы, поэтому я действительно хочу:

Запустите все сборки дополнительного выпуска, а затем произойдет сбой всех выпусков в случае сбоя одного или нескольких дополнительных выпусков (в идеале, с хорошим сообщением об ошибке, при котором сборка не удалась).

Есть идеи?

Ответы [ 2 ]

3 голосов
/ 22 октября 2009

Предлагаем взглянуть на расширения, доступные в ant-contrib задачах.

Задача 'for' может быть адаптирована к вашим требованиям.

Ваша цель «все релизы» с заданием ant-contrib task может выглядеть следующим образом:

<taskdef resource="net/sf/antcontrib/antlib.xml">
    <classpath>
        <pathelement location="lib/ant-contrib-1.0b3.jar"/>
    </classpath>
</taskdef>

<target name="all-release">
    <for keepgoing="true" param="file">
        <path>
            <fileset dir="." includes="*/build.xml" />
        </path>
        <sequential>
            <ant antfile="@{file}" target="sub-release" />
        </sequential>
    </for>
</target>

Используя некоторые другие функции ant-contrib, можно получить список сбоев.

Пример журнала сверху build.xml:

$ ant all-release
Buildfile: build.xml

all-release:
     [echo] /work/Scratch/dir1/build.xml

sub-release:
     [echo] dir1
     [echo] /work/Scratch/dir2/build.xml

sub-release:
     [echo] dir2
      [for] /work/Scratch/dir2/build.xml: The following error occurred while executing this line:
      [for] /work/Scratch/build.xml:17: The following error occurred while executing this line:
      [for] /work/Scratch/dir2/build.xml:6: dir2 failed
     [echo] /work/Scratch/dir3/build.xml

sub-release:
     [echo] dir3

BUILD FAILED
/work/Scratch/build.xml:11: Keepgoing execution: 1 of 3 iterations failed.

Total time: 0 seconds
1 голос
/ 29 октября 2009

Antelope Расширения Ant имеют команду try-catch, которую можно использовать для выполнения любых задач:

<taskdef name="try" classname="ise.antelope.tasks.TryTask"/>
....
<try break="false" printmessage="true" >
   <antcall target="xmlValidate" />
   <antcall target="runJunit" />
   <antcall target="..." />
   <catch>
      <property name="haderrors" value="true"/>
   </catch>
</try>
<fail message="FAILED" if="haderrors" />

break=false давайте продолжим следующую команду после сбоя. Но неудачные цели устанавливают свойство haderrors, которое проверяется в конце. Я часто использовал его для работ по сборке (и он отлично работает), но я не уверен, что он работает для <fileset> внутри <subant>. Возможно, вам нужно перечислить все <subant> вызовы явно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...