自己动手实现Maven Plugin

来源:互联网 发布:layabox js教程 编辑:程序博客网 时间:2024/06/05 16:04

自己动手实现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");


原创粉丝点击