Подтвердить что ты не робот

Ошибка сборки maven, когда maven-antrun-plugin не удалось

Я запускаю задачу Ant, которая запускает junit-тест из maven, используя maven-antrun-plugin. Вызов выглядит следующим образом:

<plugin>
  <artifactId>maven-antrun-plugin</artifactId>
  <executions>
    <execution>
      <id>ant-test</id>
      <phase>test</phase>
      <goals>
        <goal>run</goal>
      </goals>
      <configuration>
        <tasks unless="maven.test.skip">
          <ant antfile="${basedir}/build.xml" target="test">
            <property name="build.compiler" value="extJavac" />
          </ant>
        </tasks>
      </configuration>
    </execution>
</executions>
</plugin>  

Когда тесты терпят неудачу, сборка продолжается и сообщает об успешности. Я попытался воспроизвести это поведение только с помощью Ant (запустив Ant из командной строки 'ant -f example.xml'):

<project name="example" basedir="." default="aa">
<target name="aa">
  <ant antfile="build.xml" target="test" />
</target>
</project>

но в этом случае все так же, как ожидалось: первый сбой теста останавливает сборку и сообщает, что она не увенчалась успехом. Похоже, что maven делает некоторую магию (или вызывает Ant по-другому).

Итак, мой вопрос: как добиться эффекта неудачной сборки maven при неудачной тестовой задаче antrun.

4b9b3361

Ответ 1

Возможно, вы захотите взглянуть на атрибут failonerror для antrun:

<exec executable="python" dir="${project.root}/modules" failonerror="true"></exec>

Ссылка.

Ответ 2

Ваш вопрос поднимает один очевидный вопрос взамен, почему бы просто не использовать Maven для запуска JUnit? Модуль surefire plugin выполнит любые тесты (на этапе тестирования), которые были скомпилированы в фазе тестового компиляции в целевые/тестовые классы (обычно содержимое src/test/java). Там статья JavaWorld дает введение в использование Junit с Maven, которое может показаться вам полезным

Предполагая, что у вас есть веская причина использовать Ant для вызова тестов, вам необходимо убедиться, что Ant настроен на сбой, если тесты недействительны. Вы можете сделать это, настроив задачу JUnit. Свойства, которые вы можете задать, - haltonerror или haltonfailure. В качестве альтернативы вы можете установить свойство при сбое и вывести из строя Ant самостоятельно, используя свойство failproperty.


Я включил два примера, чтобы продемонстрировать отказ Ant, вызвавший сбой сборки Maven. Первый - это прямой вызов задачи сбоя, второй вызывает задачу в файле build.xml так же, как и вы.

Этот тривиальный пример показывает, что сбой Ant приведет к сбою сборки Maven:

<plugins>
  <plugin>
    <artifactId>maven-antrun-plugin</artifactId>
    <executions>
      <execution>
        <phase>test</phase>
        <configuration>
          <tasks>
            <fail message="Something wrong here."/>
          </tasks>
        </configuration>
        <goals>
          <goal>run</goal>
        </goals>
      </execution>
    </executions>
  </plugin>
</plugins>

[INFO] [antrun:run {execution: default}]
[INFO] Executing tasks
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] An Ant BuildException has occured: Something wrong here.

Расширение примера использования вызова Ant, как у вас:

<plugins>
  <plugin>
    <artifactId>maven-antrun-plugin</artifactId>
    <executions>
      <execution>
        <phase>test</phase>
        <configuration>
        <tasks unless="maven.test.skip">
          <ant antfile="${basedir}/build.xml" target="test">
            <property name="build.compiler" value="extJavac" />
          </ant>
        </tasks>
        </configuration>
        <goals>
          <goal>run</goal>
        </goals>
      </execution>
    </executions>
  </plugin>
</plugins>

С build.xml как:

<?xml version="1.0"?>
<project name="test" default="test" basedir=".">
  <target name="test">
    <fail message="Something wrong here."/>
  </target>
</project>

Дает следующую ошибку:

[INFO] [antrun:run {execution: default}]
[INFO] Executing tasks

test:
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] An Ant BuildException has occured: The following error occurred while executing this line:
C:\test\anttest\build.xml:4: Something wrong here.