17.4. 编写自定义插件

在你编写自定义插件的时候,你实际上是要编写一系列的Mojo(目标)。每个Mojo是一个单独的Java类,它包含了一系列注解来告诉Maven如何生成插件描述符。在编写Mojo类之前,你需要使用正确的打包类型和POM来创建一个Maven项目。

17.4.1. 创建一个插件项目

要创建一个插件项目,你应该使用Maven Archetype插件。以下的命令会创建一个插件,其groupIdorg.sonatype.mavenbook.pluginsartifactIdfirst-maven-plugin

$ mvn archetype:create \
  -DgroupId=org.sonatype.mavenbook.plugins \
  -DartifactId=first-maven-plugin \
  -DarchetypeGroupId=org.apache.maven.archetypes \
  -DarchetypeArtifactId=maven-archetype-mojo

Archetype插件会创建一个名为my-first-plugin的目录,其包含了如下的POM:

Example 17.2. 一个插件项目的POM

<?xml version="1.0" encoding="UTF-8"?><project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.sonatype.mavenbook.plugins</groupId>
  <artifactId>first-maven-plugin</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>maven-plugin</packaging>
  <name>first-maven-plugin Maven Mojo</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>org.apache.maven</groupId>
      <artifactId>maven-plugin-api</artifactId>
      <version>2.0</version>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

在一个插件项目的POM中最重要的元素是打包类型,其值为maven-plugin。该打包类型会定制Maven的生命周期,使其包含创建插件描述符必要的目标。插件生命周期在Section 10.2.3, “Maven Plugin”中介绍,它和Jar生命周期类似,但有三个例外:plugin:descriptor被绑定到generate-resources阶段,plugin:addPluginArtifactMetadata被添加到package阶段,plugin:updateRegistry被添加到install阶段。

插件项目的POM中另一个重要的部分是,它有一个对于Maven Plugin API的依赖。该项目依赖于maven-plugin-api的2.0版本,同时它也有一个测试范围的JUnit依赖。