Maven自定义插件
一、背景
Maven是由一系列用于执行构建任务的插件和一个负责项目处理和构建的核心引擎组成。Maven提供了很多插件,如果现有插件无法满足需求,可以根据特定需求自定义开发插件。
二、命名规范
插件的groupId没有特别约定,插件的artifactId需要符合一定命名规范。
Maven的官方插件artifactId格式为maven-prefix -plugin,非maven官方开发的插件artifactId格式为prefix-maven-plugin。
三、插件开发
每个Mojo是maven插件的一个goal,多个goal会组成一个Maven插件,自定义插件就是开发Mojo工程。Mojo工程中packaging需要定义成maven-plugin类型。
javascript
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.");
}
}
四、执行插件
1.执行插件
将插件添加到项目的pom的plugin依赖中,然后可以通过maven命令行来执行插件。
javascript
<project>
...
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>sample.plugin</groupId>
<artifactId>hello-maven-plugin</artifactId>
<version>1.0-SNAPSHOT</version>
</plugin>
</plugins>
</pluginManagement>
</build>
...
</project>
命令格式如下:
javascript
mvn groupId:artifactId:version:goal
例如如果要执行以上插件就需要执行 mvn sample.plugin:hello-maven-plugin:1.0-SNAPSHOT:sayhi。
2.简化命令行
2.1 命令格式为 mvn groupId:artifactId:goal
此时会执行本地代码库插件的最新版本。以上命令可以简化为mvn sample.plugin:hello-maven-plugin:sayhi
2.2 命令格式为 mvn ${prefix}:goal
此时maven框架会将 p r e f i x 自动映射成 {prefix}自动映射成 prefix自动映射成{prefix}-maven-plugin(或者maven-${prefix}-plugin),同时需要在setting文件中pluginGroups加入sample.plugin。以上命令可以简化为mvn hello:sayhi。
javascript
<pluginGroups>
<pluginGroup>sample.plugin</pluginGroup>
</pluginGroups>
五、构建周期执行插件
如果想在构建周期过程中需要执行自定义插件,则需要通过配置进行关联。配置如下,这样当构建生命周期执行到compile阶段时,maven会执行自定义插件的goal中sayhi的功能。
javascript
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>sample.plugin</groupId>
<artifactId>hello-maven-plugin</artifactId>
<version>1.0-SNAPSHOT</version>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>sample.plugin</groupId>
<artifactId>hello-maven-plugin</artifactId>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>sayhi</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
总结
主要介绍Maven自定义插件开发、通过命令行执行maven自定义插件、并且将自定义插件与构建周期进行绑定。