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] ------------------------------------------------------------------------
什么时候应该抛出哪个例外以及为什么?
答案 0 :(得分:31)
如果问题导致无法继续构建,您似乎应该抛出MojoExecutionException
,否则请使用MojoFailureException
。
当maven运行时,您可以控制处理MojoFailureExpections
的行为。
以下链接详细说明了差异: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
答案 1 :(得分:2)
如果构建步骤失败,则抛出MavenFailureException
,但可以忽略它(例如,您可能希望忽略失败的测试)。
如果无法继续,请抛出一个MavenExecutionException
- 说你发现了一个不可恢复的状态,就像你正在尝试编译而且项目无法编译,因此之后的所有内容都会毫无结果。
MavenExecutionException
将始终终止构建,而MavenFailureException
的行为是可配置的。
默认行为是快速失败,即与构建错误相同的行为,这通常是您想要的。您可以通过传递命令行标志来改变行为:
mvn -fae
最后失败,即每个构建步骤都将执行,如果某个阶段失败,您可能会遇到后续失败,整个构建只有在每个步骤执行后才会失败。
mvn -fn
不要失败。如果您想忽略例如失败的集成测试但仍然mvn deploy
。