其实就是简单地打印了一句话。
我们也可以在项目下执行(由于我们的项目名符合XXX-maven-plugin规范,所以可以省略maven-plugin):
mvn demo:hello
也可以得到同样的效果。
完整的命令格式为:
mvn groupId:artifactId:version:goal
即:
【Mojo配置方式】
Mojo的配置有两种方式:
一种是JavaDoc + Tag,即上面的示例代码所使用的方式。
另一种是注解,使用@Mojo, @Parameter等annotation来配置。
下面简单解释一下各个标记的含义:
@goal<name>
自定义 Maven 插件 Mojo 代码中唯一必须声明的标记,用来声明该 Mojo 的目标名称。
@phase<name>
默认将该目标绑定到 default 生命周期的某个阶段。
这样在配置使用该插件目标时就可以不声明 phase。
@requiresDependecyResolution<scope>
声明运行该 Mojo 之前必须解析哪些范围的依赖。
@requiresProject<true/false>
声明该目标是不是必须在一个 Maven 项目中运行,默认值是true。
@requiresDirectInvoction<true/false>
声明该目标是否只能使用命令行调用,默认值是 false,既可以在命令行中调用,也可以在 pom 中配置绑定生命周期阶段。
@requiresOnline<true/false>
声明 Maven 是不是必须是在线状态,默认值是 false。
@requiresReport<true/false>
声明是否要求项目报告已经生成,默认值是 false。
@aggregator
在多模块的 Maven 项目中,声明该目标是否只在顶层模块构建的时候执行。
@execute goal="<goal>"
声明执行该目标之前,先执行指定的目标。
如果该目标是自己插件的另外一个目标,直接 goal="目标名"。
如果该目标是另外一个插件的目标,就需要写成 goal="目标前缀:目标名"。
@execute phase="<phase>"
声明在执行该目标之前,Maven 先运行到当前生命周期的指定阶段。
@execute lifecycle="<lifecycle>"phase="<phase>"
声明在执行该目标之前,Maven 运行到指定生命周期的指定阶段。
【使用注解开发Mojo】
首先添加依赖:
<dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-annotations</artifactId>
<version>3.6.0</version>
</dependency>
需要指定maven-plugin-plugin的版本,否则有可能因为默认的maven-plugin-plugin版本过低,导致不能识别注解:
<build>
<plugins>
<!-- 指定maven-plugin-plugin版本,默认版本过低,可能无法识别注解 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-plugin-plugin</artifactId>
<version>3.6.0</version>
</plugin>
</plugins>
</build>
然后创建新的类,继承AbstractMojo,使用注解,如下: