Maven插件开发引导--第一个maven插件项目

前言

    因为最近觉得mybatis自动生成代码的功能很有用且有趣,就打算研究一下maven插件。本文的主要目的是使用命令行和使用idea引导建立第一个简单的”hello,world” maven插件,部分参考了官方的文档。个人感觉官方文档内容设计不是特别好,有兴趣有能力的同学可以自己看。

重要官方提示:插件命名规范和Apache Maven商标

    你最好命名你的插件为<yourplugin>-maven-plugin。
    强烈不建议你命名插件为maven-<yourplugin>-plugin(maven放在开头),因为这个命名模式是为Apache Maven团队的groupId为org.apache.maven.plugins的插件项目保留的。使用这个命名模式侵犯了Apache Maven的商标。

你的第一个插件

    在这个部分,我们将会创建一个简单的插件,这个插件不需要任何参数而且运行时只在屏幕上显示一条信息。这样,我们能够展示创建一个插件项目的基本要点、最简单的Java mojo的内容定义,以及几种运行mojo的方法。

命令行创建

    先展示整个项目的目录结构。
maven插件开发-maven-plugin.png

你的第一个mojo

    简单来说,一个java mojo就是一个简单的能够实现一个插件的目标的java类。尽管一个插件中,几个相似的mojo也可能会有一个父类来实现共同的代码,但是不需要像EJBs一样需要很多的类。
    当遍历源码目录获取mojo类时,插件工具会寻找带有Java 5 @Mojo 注解或者 "goal"javadoc注解的类。带有这个注解的类都会被被包含在插件的配置文件中。

A Simple mojo

下面是一个简单的没有参数的mojo的例子。

package sample.plugin;

import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugins.annotations.Mojo;

/**
 * Says "Hi" to the user.
 *
 */
@Mojo( name = "sayhi")
public class GreetingMojo extends AbstractMojo
{
    public void execute() throws MojoExecutionException
    {
        getLog().info( "Hello, world." );
    }
}
  • 除了excute方法,类org.apache.maven.plugin.AbstractMojo提供了实现一个mojo的所有基础要素。
  • 需要注解@Mojo
  • excute方法可以抛出两种异常:
    • org.apache.maven.plugin.MojoExecutionException:如果出现任何未知的错误,抛出这个异常将会显示一个“BUILD ERROR”信息。
    • org.apache.maven.plugin.MojoFailureException:如果产生发生了已知的问题,抛出这个异常将会显示一个“BUILD FAILURE”信息。
  • getLog方法(在AbstractMojo中定义)返回一个类似log4j的logger对象,这个对象允许插件创建“debug”、”info“、“warn”、”error”标签的日志。这个logger对象可以作为一个给用户打印日志的一个方式。
pom配置:

    mojo类完成了之后,为了正确的完成构建,项目需要合理地设置一些配置。

groupId插件的groupId,最好匹配这个MOJO包的通用的前缀
artifactId插件名
version插件版本
packaging应该设置为“maven-plugin”
dependencies对于Maven Plugin Tools API,需要引入的依赖,这样项目才能去解析"AbstractMojo" 和相关的其他类。

下面是对上面表格中描述的参数在一个简单的mojo项目的pom中如何设置的举例说明:

<project>
  <modelVersion>4.0.0</modelVersion>

  <groupId>sample.plugin</groupId>
  <artifactId>hello-maven-plugin</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>maven-plugin</packaging>

  <name>Sample Parameter-less Maven Plugin</name>

  <dependencies>
    <dependency>
      <groupId>org.apache.maven</groupId>
      <artifactId>maven-plugin-api</artifactId>
      <version>3.0</version>
    </dependency>

    <!-- dependencies to annotations -->
    <dependency>
      <groupId>org.apache.maven.plugin-tools</groupId>
      <artifactId>maven-plugin-annotations</artifactId>
      <version>3.4</version>
      <scope>provided</scope>
    </dependency>
  </dependencies>
</project>
构建一个插件

    定义在maven-plugin中,有几个和标准构建流程相关的插件功能。

compile编译插件的java代码
process-classes获取数据构建关键字
test运行插件单元测试
package构建插件jar包
install在本地仓库中部署插件jar包
deploy在远程仓库部署插件jar包

在项目根目录下执行 mvn install,就能编译部署插件jar包到本地仓库。

也可以使用模板构建一个maven插件项目,直接执行命令:

mvn archetype:generate -DgroupId=sample.plugin -DartifactId=hello-maven-plugin -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-plugin

一路回车确定,就会在当前目录生成一个模板插件项目。

执行你的第一个Mojo

    执行你的新插件最直接的方式是在命令行中。首先在你的项目中的pom.xml中添加下面的语句,引入这个插件。

···
<build>
  <plugins>
    <plugin>
      <groupId>sample.plugin</groupId>
      <artifactId>hello-maven-plugin</artifactId>
      <version>1.0-SNAPSHOT</version>
    </plugin>
  </plugins>
</build>
···

然后需要在项目根目录下以下面的完整格式:

mvn groupId:artifactId:version:goal

执行插件。例如上面的例子就是"mvn sample.plugin:hello-maven-plugin:1.0-SNAPSHOT:sayhi"。如果你是要测试这个插件是否成功,也可以直接在插件项目的根目录执行"mvn sample.plugin:hello-maven-plugin:1.0-SNAPSHOT:sayhi",运行结果如下:
maven插件开发-run.png

还可以将插件和具体的构建生命周期绑定起来,需要在pom中修改build配置。

···
<build>
  <plugins>
    <plugin>
      <groupId>sample.plugin</groupId>
      <artifactId>hello-maven-plugin</artifactId>
      <version>1.0-SNAPSHOT</version>
      <executions>
        <execution>
          <phase>compile</phase>
          <goals>
            <goal>sayhi</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>
···

这样配置的话,当项目在编译的过程中你的插件也会被执行。具体信息可以参考后续的文章(如果有,我会在这里补充出来O. O)。

idea创建

生成插件项目

    idea创建一个插件模板项目就比较简单了,以下是贴图流程。

  1. 首先创建一个maven mojo的插件项目
    maven插件开发-first.png
  2. 设置项目
    maven插件开发-second.png
  3. 一路点击下一步,然后生成plugin项目
    maven插件开发-third.png

自动生成的代码已经包括了Mojo类,可以修改excute方法的内容,输出“hello world"。

引用插件

    在pom.xml中引入插件配置后,可以在idea的maven构建窗口看到:
maven插件开发-hello.png

双击运行可以看到日志输出:
maven插件开发-build.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值