Запуск всех тестов в Maven, даже при наличии ошибок
Быстрый ответ
Когда нам нужно, чтобы Maven продолжал тестирование, несмотря на возникновение ошибок, мы используем флаг -DtestFailureIgnore=true:
mvn test -DtestFailureIgnore=true
При этом Maven будет игнорировать тесты, которые не прошли, что поможет нам получить полную картину состояния проекта.

Многомодульные проекты: движемся вперед несмотря на ошибки
Во многомодульном проекте провал в тесте одного модуля может вызвать остановку сборки всех последующих. Вот как Maven предлагает обойти это:
mvn clean install -fae # --fail-at-end
mvn clean install -fn  # --fail-never
- Опция -faeили--fail-at-endуказывает Maven завершить сборку и сообщить обо всех проблемах после обработки всех модулей.
- -fnили- --fail-neverдает указание Maven продолжить, независимо от ошибок, которые возникают при тестировании.
Тонкая настройка обработки ошибок тестов через плагин Surefire
Для того чтобы приспособить выполнение тестов под свои нужды, подключите в файле pom.xml проекта плагин Surefire:
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>2.22.2</version> <!-- обновите на последнюю версию при необходимости -->
  <configuration>
    <testFailureIgnore>true</testFailureIgnore>
  </configuration>
</plugin>
Это обеспечит единый механизм обработки ошибок на этапе тестирования во всех подмодулях вашего проекта.
Сборка вложенных проектов: каждый тест – это важно
Если ваш проект включает в себя множество вложенных проектов с зависимостями, используйте параметр -fn (--fail-never):
mvn -fn test
Это позволит Maven закончить тестирование всех вложенных проектов, несмотря на ошибки.
Визуализация
Представьте настройку Maven как школу, где каждый тест – это отдельный ученик:
| Тесты как Ученики | Результат | 
|---|---|
| Ученик А | ✅ Пройден | 
| Ученик Б | ❌ Ошибка | 
| Ученик В | ✅ Пройден | 
| Ученик Г | ❌ Ошибка | 
Если мы работаем в стандартном режиме, то сбой одного теста завершит весь процесс:
📚🏫 – Стандартное поведение Maven
| Выполнение тестов:
| ❌ Ученик Б допустил ошибку, занятия закончены!|
Но если мы включили опцию игнорирования ошибок, то все "ученики" пройдут тестирование до конца:
🌟🏫 – Режим работы Maven с опцией игнорирования ошибок
| Выполнение тестов:
| ❌ Ученик Б ошибся, но занятия продолжаются! |
Главная мысль: Полнота отчёта – важнее, чем его обрыв.
Баланс между полнотой набора тестов и успешной сборкой
Используя опции -fn и -fae, а также плагин Surefire, можно найти баланс между полнотой набором тестов и успешностью сборки. Такой подход позволяет не останавливаться на одном проваленном тесте и выявлять все потенциальные проблемы на этапе тестирования.
Советы по настройке и распространённые подводные камни
Вот несколько рекомендаций для работы с Maven:
- Чтобы временно игнорировать ошибки в тестах без изменения файла pom.xml, можно использовать флаг -Dmaven.test.failure.ignore=true.
- Отзывчиво помните об ограничениях использования <testFailureIgnore>в многомодульных проектах, особенно при наличии модульной зависимости.
Для более глубокого понимания возможностей и управления настройками изучайте документацию Maven.
Полезные материалы
- Плагин Maven Surefire – surefire:test – детальная инструкция по настройке плагина Maven Surefire.
- Плагин Maven Failsafe – Введение – обзор плагина Maven Failsafe для интеграционных тестов.
- Программа пользователя Junit 5 – всестороннее руководство по использованию JUnit.
- Maven – Introduction to the build lifecycle – полезная информация о жизненном цикле сборки в Maven.
- Непрерывная интеграция – управление ошибками тестирования в континуальной интеграции от Мартина Фаулера.


