在你编写自定义插件的时候,你实际上是要编写一系列的Mojo(目标)。每个Mojo是一个单独的Java类,它包含了一系列注解来告诉Maven如何生成插件描述符。在编写Mojo类之前,你需要使用正确的打包类型和POM来创建一个Maven项目。
要创建一个插件项目,你应该使用Maven
Archetype插件。以下的命令会创建一个插件,其groupId
是org.sonatype.mavenbook.plugins
,artifactId
是first-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依赖。