何时在Maven中使用MojoExecutionException与MojoFailureException

Ric*_*ler 40 maven-2 maven-plugin

AbstractMavenMojo的execute方法声明它抛出两个异常,MojoExecutionException和MojoFailureException.抛出任一导致构建停止并且日志在每种情况下显示几乎相同的消息.

MojoExecutionException的消息是:

[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] [exception text]
[INFO] ------------------------------------------------------------------------
[INFO] For more information, run Maven with the -e switch
[INFO] ------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

并且MojoFailureException的消息是:

[INFO] ------------------------------------------------------------------------
[ERROR] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] [exception text]
[INFO] ------------------------------------------------------------------------
[INFO] For more information, run Maven with the -e switch
[INFO] ------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

什么时候应该抛出哪个例外以及为什么?

Kin*_*ick 31

MojoExecutionException如果问题导致无法继续构建,并且使用MojoFailureException其他方法,那么您似乎应该抛出一个.

您可以控制MojoFailureExpectionsmaven运行时处理的行为.

以下链接详细说明了这些区别:https://books.sonatype.com/mvnref-book/reference/writing-plugins-sect-custom-plugin.html#writing-plugins-sect-failure
断开链接?谷歌搜索 sonatype write-plugins-sect-custom-plugin writing-plugins-sect-failure


scr*_*avy 5

MavenFailureException如果您的构建步骤失败,但可以忽略它(例如您可能想忽略失败的测试),则抛出 a 。

MavenExecutionException如果无法继续,则抛出- 假设您检测到无法恢复的情况,就像您试图编译一样,并且项目无法编译,因此之后的一切都将毫无结果。

MavenExecutionException总是会终止构建,而其行为MavenFailureException是可配置的。

默认行为是快速失败,即与构建错误相同的行为,这通常是您想要的。您可以通过传递命令行标志来改变行为:

mvn -fae最后失败,即每个构建步骤都将被执行,如果一个阶段失败,您可能会遇到后续失败,只有在执行每个步骤后,整个构建才会失败。

mvn -fn不要失败。如果您想忽略例如失败的集成测试,那么这很有用mvn deploy