Mojo中的execute()
方法抛出两个异常,MojoExecutionException
和MojoFailureException
。这两个异常的区别既微妙又重要,这要看当目标运行“失败”的时候发生了什么。一个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
。