17.3.2. Mojo配置

接下来是每个Mojo的声明。plugin元素包含一个名为mojos的元素,它为每个插件中的mojo元素包含一个mojo元素。每个mojo元素包含如下的配置元素:

goal

这是目标的名称。如果你在运行compiler:compile目标,compiler就是插件的goalPrefixcompile就是目标的名称。

description

目标的简要描述,当用户使用Help插件生成插件文档的时候,该描述会被显示。

requiresDirectInvocation

如果你将其设置成true,那么该目标就只能由用户在命令行显示的执行。如果有人想要将该目标绑定到一个生命周期阶段,Maven会打印错误信息。该元素默认值是false

requiresProject

指定该目标不能在项目外部运行。目标需要一个带有POM的项目。requiresProject默认的值为true

requiresReports

如果你正创建一个插件,它依赖于报告,那么你就需要将requiresReports设置成true。例如,如果你创建一个插件用来聚合许多报告的信息,那么就需要将requiresReports设置成true。该元素默认的值为false

aggregator

当Mojo描述符的aggregator设置成true的时候,那么该目标只会在Maven执行的时候运行一次,提供该配置是为了让开发人员能够对一系列构建进行总结;例如,创建一个插件来概述构建中所有项目的一类报告。一个aggregator设置成true的目标应该只在Maven构建的顶层项目中运行。aggregator默认值是false。aggregator在未来版本的Maven中很有可能被弃用。

requiresOnline

指定当Maven在离线模式(-o命令行选项)的时候该目标不能运行。如果一个目标依赖于网络资源,你就需要将该元素设置成true,那么如果在离线模式下运行,Maven就会输出错误信息。该元素默认值是false

inheritedByDefault

如果inheritedByDefault被设置成true,在父项目中配置的mojo就会同样在子项目中生效。如果你配置一个mojo在父项目中特定的阶段执行,并且该插件inheritedByDefault属性的值为true,这段执行会被子项目继承。如果inheritedByDefault没有被设置成true,那么定义在父项目中的目标执行不会被子项目继承。

phase

如果用户没有为该目标绑定一个阶段,那么该元素定义一个mojo默认的阶段。如果你没有不指定phase元素,Maven就会要求用户在POM中显式的指定一个阶段。

implementation

该元素告诉Maven需要为该Mojo初始化什么类。这是一个Plexus组件属性(在Plexus ComponentDescriptor 中定义)。

language

Maven Mojo默认的语言是java。该配置控制Plexus ComponentFactory初始化该Mojo组件。本章关注于使用Java编写Maven插件,但是你也可以使用其它很多语言来编写Maven插件,如Groovy, Beanshell,和Ruby。如果你使用这其中的一种语言来编写插件,那么就需要设置language元素的值。

instantiationStrategy

该属性是一个Plexus组件配置属性,它告诉Plexus如何创建和管理组件实例。在Maven中,所有mojo的instantiationStrategy都被配置成per-lookup,每次Maven从Plexus获取该mojo的时候,一个新的实例被创建。

executionStrategy

executionStrategy告诉Maven什么时候,怎样运行一个Mojo。可用的值是once-per-sessionalways。老实说,任何值都是可用的,这个特殊的属性并不做什么事情,它是从早期Maven设计中遗留下来的。在未来版本的Maven中该属性很有可能被弃用。

parameters

该元素描述Mojo的所有参数。参数名称是什么?参数类型是什么?是否是必须的?每个参数拥有如下的元素:

name

参数名(如 baseDirectory

type

参数类型(Java类)(如java.io.File

required

参数是否是必须的?如果为true,那么当目标运行的时候该参数不能为null。

editable

如果一个参数不是可编辑的(如果editable被设置成false),那么该参数的值就不能在POM中设置。例如,如果插件描述符定义了buildDirectory的值为/data/hudson-temporal-data/hudson-orchestrator-home/workspace/Book-To-Production/content-zh,那么在POM中该值就不能被重写。

description

当生成插件文档的时候(使用Help插件),该插件的简短描述。

configuration

该元素为所有Mojo参数提供默认值。本例中为Mojo参数baseDirbuildDirectory提供了默认值,这里,属性implementation指定了参数的类型(本例中是java.io.File),而其元素值包含了一个硬编码的默认值,或者一个Maven属性引用。

requirements

这是一个描述符十分有趣的地方。一个mojo是一个由Plexus管理的组件,而且,由于该原因,它就有机会引用Plexus管理的其它组件。该元素能让你定义对于其它Plexus组件的依赖。

虽然你的确应该能够读懂插件描述符,但你几乎从不需要去手工的编写一个描述符文件。插件描述符会根据Mojo的一组注解自动的生成。