Когда использовать исключение MojoExecutionException и MojoFailureException в Maven - PullRequest
39 голосов
/ 23 июня 2009

Метод execute в AbstractMavenMojo объявляет, что он генерирует два исключения: MojoExecutionException и MojoFailureException. Бросок любого из них приводит к остановке сборки, и журнал отображает почти идентичное сообщение в каждом случае.

Сообщение об исключении MojoExecutionException:

[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] [exception text]
[INFO] ------------------------------------------------------------------------
[INFO] For more information, run Maven with the -e switch
[INFO] ------------------------------------------------------------------------

и сообщение об исключении MojoFailureException:

[INFO] ------------------------------------------------------------------------
[ERROR] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] [exception text]
[INFO] ------------------------------------------------------------------------
[INFO] For more information, run Maven with the -e switch
[INFO] ------------------------------------------------------------------------

Когда вы должны выбросить какое исключение и почему?

Ответы [ 2 ]

31 голосов
/ 01 июля 2009

Похоже, вы должны выбросить MojoExecutionException, если проблема не позволяет продолжить сборку, и использовать MojoFailureException в противном случае.

Вы можете контролировать поведение для передачи MojoFailureExpections во время работы maven.

Следующая ссылка подробно описывает разницу: https://books.sonatype.com/mvnref-book/reference/writing-plugins-sect-custom-plugin.html#writing-plugins-sect-failure
Неработающей ссылке? поиск Гугл sonatype writing-plugins-sect-custom-plugin writing-plugins-sect-fault

2 голосов
/ 04 апреля 2018

Добавьте MavenFailureException, если ваш шаг сборки не удался, но он может быть проигнорирован (например, вы можете игнорировать неудачные тесты).

Бросьте MavenExecutionException, если нет возможности продолжить - скажем, вы обнаружили неисправимое условие, которое пытались скомпилировать, и проект не может быть скомпилирован, поэтому все после этого будет бесполезным.

MavenExecutionException всегда убивает сборку, тогда как поведение MavenFailureException настраивается.

Поведение по умолчанию - быстрый сбой, то есть то же самое, что и ошибка сборки, что чаще всего и нужно. Вы можете изменить поведение, передав флаг командной строки:

mvn -fae сбой в конце, т. Е. Каждый шаг сборки будет выполнен, и вы можете столкнуться с последующими сбоями в случае сбоя этапа, сборка завершится только после выполнения каждого шага.

mvn -fn не подведет. Это полезно, если вы хотите игнорировать, например, неудачный интеграционный тест, но тем не менее mvn deploy.

...