Должен ли maven-failsafe-plugin выполняться в потомках POM, где он указан?
Я указал использование Failsafe в родительском POM. Когда я бегу mvn verify
в моей многокомпонентной сборке нет никаких намеков на запуск Failsafe - он нигде не отображается в выводе консоли.
Если я добавлю то же самое <plugin>
определение в дочерний POM, он запускается (хотя он жалуется на невозможность найти \failsafe-reports\failsafe-summary.xml
).
Конечно, это должно быть наследование, какие плагины должны быть запущены?
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.15</version>
<executions>
<execution>
<goals>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
2 ответа
Сначала вы должны определить его в pluginManagement следующим образом:
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.15</version>
<executions>
<execution>
<id>integration-test</id>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
Важной частью является использование целей integration-test
а также verify
и не только verify
, Исходя из вышесказанного, вам необходимо определить реальное использование следующим образом:
<project>
[...]
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
</plugin>
</plugins>
</build>
[...]
</project>
Вы можете активировать использование отдельно в каждом подмодуле, в котором вы хотите использовать интеграционные тесты, добавив приведенный выше фрагмент кода. Обычно это только в нескольких модулях.
Вы должны добавить цель integration-test
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
Цель проверки - просто проверяет сгенерированный отчет (failsafe-summary.xml), чтобы увидеть, была ли ошибка теста, и не дает ли выполнить сборку.
Целевой интеграционный тест фактически запускает тесты, по крайней мере, для классов, которые соответствуют IT*.java
, IT.java
а также ITCase.java
по умолчанию.