自己动手实现Maven Plugin
要想开发Maven插件首先需要在自己的eclipse上安装Maven插件,这样可以帮助你开发与调试,安装过程这里就不说了,网上太多了,也很简单。
这次的教程会告诉大家开发Maven插件的步骤和相关参数的含义,最后会开发一个简单的hello world例子。
Maven把插件叫做mojo,官方的解释是:mojo就是Maven Plain Old Java Object,一个普通的Java类。
我们首先创建一个Maven项目Group Id:com.simple.plugin,Artifact:helloworld,并且在生成的pom.xml里面先加入一个选项<packaging>maven-plugin</packaging>说明该工程是Maven插件工程和我们开发插件需要的依赖关系如下:<dependencies>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-core</artifactId>
<version>3.0.4</version>
</dependency>
</dependencies>
相关包的版本号根据当时最新的版本自己修改下。
这样我们的插件工程就建好了,现在就可以实现我的第一个mojo helloworld例子了,我们通过Maven提供的一个抽象Mojo类来派生HelloWorldMojo,并且实现execute方法,该方法会在插件的运行期被调用,我们只做一个简单的日志输出打印出Hello Wrold。
非常重要的一点我们需要添加一个annotation “goal”,告诉Maven plugin执行器这个类是个是一个mojo,代码如下:
package com.simple.plugin;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
/**
*
*@goalhelloword
*
*/
publicclass HelloWorldMojo extends AbstractMojo {
publicvoid execute() throws MojoExecutionException, MojoFailureException {
getLog().info("Hello World");
}
}
插件完成后需要配置到需要被调用的Maven工程上,我们只需要在目标工程的pom.xml文件加入几行配置就可以如下:
<plugins>
<plugin>
<groupId>com.simple.plugin</groupId>
<artifactId>helloworld</artifactId>
<version>0.0.1-SNAPSHOT</version>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>helloword</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
plugins 标签描述多个插件
plugin 描述每个插件的信息
groupid 需要执行插件的groupid
artifactid 需要执行插件的artifactid
version 需要执行插件的版本
executions 工程被build生命周期中各个执行器的配置
execution 执行器相关描述
phase 在生命周期中哪个各阶段执行插件,例子中我们是编译后,其中包括很多可参考官方文档 http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
goals 该执行起所需要执行的插件
goal 插件类中@goal后声明的名字
开发完成后需要debug可以在目标工程上鼠标右键点击Run as->Maven build在弹出的配置窗口中Goals配置process-classes并且勾选上Resolve Workspace artifacts完成后点击debug就可以了
顺便说下啊,一般情况下我们设计插件都是需要访问目标工程的相关资源,这时我们可以在execute方法内通过上下文获得工程引用代码如下:
Map map = getPluginContext();
// 通过上下文拿到当前工程的引用
MavenProject project = (MavenProject) map.get("project");