17.4.6. 当Mojo失败的时候

Mojo中的execute()方法抛出两个异常,MojoExecutionExceptionMojoFailureException。这两个异常的区别既微妙又重要,这要看当目标运行“失败”的时候发生了什么。一个MojoExecutionException应该是一个致命的异常,发生了一些不可恢复的错误。如果有什么事情导致构建完全终止,你就需要抛出一个MojoExecutionException;比如说你正试图往磁盘写数据,但没有可用空间,或者,你试图发布构件到一个远程仓库,但是连接不了远程服务器。如果没有机会继续构建,就抛出一个MojoExecutionException;发生了一些严重的事情,你希望停止构建并让用户看到“BUILD ERROR”信息。

MojoFailureException就相对没有那么严重,一个目标可以失败,但它可能并不是Maven构建的世界末日。一个单元测试可以失败,或者MD5校验和可以失败;两者都是潜在的问题,但是你不会想要抛出一个异常去终止整个构建。在这种情况下,你可以抛出一个MojoFailureException。当Maven遇到项目失败的时候,他会提供不同的“弹性”设置。如下所述:

当你运行一个Maven构建的时候,它会包含一系列的项目,每个项目可以成功或者失败。你可以三种可选的失败模式:

mvn -ff

最快失败模式:Maven会在遇到第一个失败的时候失败(停止)。

mvn -fae

最后失败模式:Maven会在构建最后失败(停止)。如果Maven refactor中一个失败了,Maven会继续构建其它项目,并在构建最后报告失败。

mvn -fn

从不失败模式:Maven从来不会为一个失败停止,也不会报告失败。

如果你正在运行一个持续集成构建,无论单个项目构建成败与否都要继续构建,你可能想要忽略失败。作为一个插件开发者,你必须根据你某个特定的条件来判断使用MojoExecutionException还是MojoFailureExeception