首页 » Maven实战 » Maven实战全文在线阅读

《Maven实战》17.5 错误处理和日志

关灯直达底部

如果大家看一下Maven的源码,会发现AbstractMojo实现了Mojo接口,execute()方法正是在这个接口中定义的。具体代码如下:

这个方法可以抛出两种异常,分别是MojoExecutionException和MojoFailureException。

如果Maven执行插件目标的时候遇到MojoFailureException,就会显示“BUILD FAILURE”的错误信息,这种异常表示Mojo在运行时发现了预期的错误。例如maven-surefire-plugin运行后若发现有失败的测试就会抛出该异常。

如果Maven执行插件目标的时候遇到MojoExecutationException,就会显示“BUILD ERROR”的错误信息。这种异常表示Mojo在运行时发现了未预期的错误,例如代码清单17-2中我们不知道代码行统计插件何时会遇到IOException,这个时候只能将其嵌套进MojoExecutationException后再抛出。

上述两种异常能够在Mojo执行出错的时候提供一定的信息,但这往往是不够的,用户在编写插件的时候还应该提供足够的日志信息,AbstractMojo提供了一个getLog()方法,用户可以使用该方法获得一个Log对象。该对象支持四种级别的日志方法,它们从低到高分别为:

·debug:调试级别的日志。Maven默认不会输出该级别的日志,不过用户可以在执行mvn命令的时候使用-X参数开启调试日志,该级别的日志是用来帮助程序员了解插件具体运行状态的,因此应该尽量详细。需要注意的是,不要指望你的用户会主动去看该级别的日志。

·info:消息级别的日志。Maven默认会输出该级别的日志,该级别的日志应该足够简洁,帮助用户了解插件重要的运行状态。例如,maven-compiler-plugin会使用该级别的日志告诉用户源代码编译的目标目录。

·warn:警告级别的日志。当插件运行的时候遇到了一些问题或错误,不过这类问题不会导致运行失败的时候,就应该使用该级别的日志警告用户尽快修复。

·error:错误级别的日志。当插件运行的时候遇到了一些问题或错误,并且这类问题导致Mojo无法继续运行,就应该使用该级别的日志提供详细的错误信息。

上述每个级别的日志都提供了三个方法。以debug为例,它们分别为:

·void debug(CharSequence content);

·void debug(CharSequence content,Throwable error);

·void debug(Throwable error);

用户在编写插件的时候,应该根据实际情况选择适应的方法。基本的原则是,如果有异常出现,就应该尽量使用适宜的日志方法将异常堆栈记录下来,方便将来的问题分析。

如果使用过Log4j之类的日志框架,就应该不会对Maven日志支持感到陌生,日志不是一个Maven插件的核心代码,但是为了方便使用和调试,完整的插件应该具备足够丰富的日志代码。