接下来是每个Mojo的声明。plugin元素包含一个名为mojos的元素,它为每个插件中的mojo元素包含一个mojo元素。每个mojo元素包含如下的配置元素:
- goal
-
这是目标的名称。如果你在运行
compiler:compile
目标,compiler
就是插件的goalPrefix
,compile
就是目标的名称。 - 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
。该配置控制PlexusComponentFactory
初始化该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-session
和always
。老实说,任何值都是可用的,这个特殊的属性并不做什么事情,它是从早期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参数
baseDir
和buildDirectory
提供了默认值,这里,属性implementation指定了参数的类型(本例中是java.io.File
),而其元素值包含了一个硬编码的默认值,或者一个Maven属性引用。 - requirements
-
这是一个描述符十分有趣的地方。一个mojo是一个由Plexus管理的组件,而且,由于该原因,它就有机会引用Plexus管理的其它组件。该元素能让你定义对于其它Plexus组件的依赖。
虽然你的确应该能够读懂插件描述符,但你几乎从不需要去手工的编写一个描述符文件。插件描述符会根据Mojo的一组注解自动的生成。