44

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] ------------------------------------------------------------------------

MojoFailureException 的消息是:

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

什么时候应该抛出哪个异常,为什么?

4

2 回答 2

34

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-failure

于 2009-07-01T13:12:12.623 回答
4

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

如果无法继续,则抛出 a MavenExecutionException- 假设您检测到无法恢复的情况,例如您正在尝试编译并且无法编译该项目,因此之后的一切无论如何都将是徒劳的。

MavenExecutionException将始终终止构建,而 的行为MavenFailureException是可配置的。

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

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

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

于 2018-04-04T16:51:39.347 回答