现在的位置: 首页 > 综合 > 正文

Maven的Mojo标注

2019年06月18日 ⁄ 综合 ⁄ 共 2009字 ⁄ 字号 评论关闭
每个Mojo都必须使用@goal标注来注明其目标名称,否则Maven将无法识别该目标。
Mojo的标注不仅限于@goal,以下是一些可以用来控制Mojo行为的标注:
1、@goal<name>
这是唯一必须声明的标注,当用户使用命令行调用插件,或者在POM中配置插件的时候,都需要使用该目标名称。

2、@phase<phase>
默认将该目标绑定至Default声明周期的某个阶段,这样在配置使用该插件目标的时候就不需要声明phase。例如,maven-surefire-plugin的test目标就带有@phase test标注。

3、@requiresDependencyResolution<scope>
表示在运行该Mojo之前必须解析所有指定范围的依赖。例如,maven-surefire-plugin的test目标带有@requiresDependencyResolution test标注,表示在执行测试之前,所有测试范围的依赖必须得到解析。这里可用的依赖范围有compile、test和runtime,默认值为runtime。

4、@requiresProject<true/false>
表示该目标是否必须在一个Maven项目中运行,默认为true。大部分插件目标都需要依赖一个项目才能执行,但有些例外。例如maven-help-plugin的system目标,它用来像是系统属性和环境变量信息,不需要实际项目,因此使用了@requiresProject false目标。另外,maven-archetype-plugin的generate目标也是一个很好的例子。

5、@requiresDirectInvocation<true/false>
当值为true的时候,该目标酒只能通过命令行直接调用,如果试图在POM中将其绑定到生命周期阶段,Maven就会报错,默认值为false。如果你希望编写的插件只能在命令行独立运行,就应担使用该标记。

6、@requiresOnline<true/false>
表示是否要求Maven必须是在线状态,默认值是false。

7、@requiresReport<true/false>
表示是否要求项目报告已经生成,默认值是false。

8、@aggregator
当Mojo在多模块项目上运行时,使用该标注表示该目标只会在顶层模块运行。例如maven-javadoc-plugin的aggregator-jar使用了@aggregator,它不会为多模块项目的每个模块生成javadoc,而是在顶层项目生成一个已经聚合的javadoc文档。

9、@execute goal="<goal>"
在运行该目标之前先让Maven运行另外一个目标,如果是本插件的目标,则直接使用目标名称,否则使用“prefix:goal”的形式,即注明目标前缀。例如,maven-pmd-plugin是一个使用PMD来分析项目源码的工具,它包含pmd和check等目标,其中pmd用来生成报告,而check用来验证报告。由于check是依赖pmd生成的内容的,因此可以看到它使用了标注@execute goal="pmd"。

10、@execute phase="<phase>"
在运行该目标之前让Maven先运行一个并运行的生命周期,到指定的阶段为止。例如maven-dependency-plugin的analyze使用了标注@execute phase="test-compile",因此当用户在命令行执行dependency:analyze的时候,Maven会首先先执行default生命周期所有至test-compile的阶段。

11、execute lifecycle="<lifecycle>" phase="<phase>"
在运行该目标之前让Maven先运行一个自定义的生命周期,到指定的阶段为止。例如maven-surefire-report-plugin这个用来生成测试报告的插件,它有一个report目标,标注了@execute phase="test" lifecycle="surefire",表示运行这个自定义的surefire生命周期至test阶段。自定义生命周期的配置文件位于src/main/resource/META-INF/maven/lifecycle.xml。
maven-surefire-report-plugin的自定义生命周期代码:

<lifecycles>
	<lifecycle>
		<id>surefire</id>
		<phases>
			<phase>
				<id>test</id>
				<configuration>
					<testFailureIgnore>true</testFailureIgnore>
				</configuration>
			</phase>
		</phases>
	</lifecycle>
</lifecycles>

抱歉!评论已关闭.