如何编写一个Maven插件

2025-05-13 16:21:29
推荐回答(1个)
回答1:

1.创建一个插件项目
要创建一个插件项目,你应该使用Maven Archetype插件。以下的命令会创建一个
插件,其groupId是org.codehaus.mojo,artifactId是first-maven-plugin:
$ mvn archetype:create \
-DgroupId=org.codehaus.mojo\
-DartifactId=first-maven-plugin \
-DarchetypeGroupId=org.apache.maven.archetypes \
-DarchetypeArtifactId=maven-archetype-mojo
groupId默认情况下有两个可以使用,一般不要改动,artifactId自己随便命名
工程创建后会包含一个pom.xml,如下:

4.0.0
org.codehaus.mojo
first-maven-plugin
1.0-SNAPSHOT
maven-plugin
first-maven-plugin Maven Mojo
http://maven.apache.org



org.apache.maven
maven-plugin-api
2.0


junit
junit
3.8.1
test





里是该插件的依赖,以后需要可手动添加。
2.创建mojo
Mojo接口只关心两件事情:目标运行结果的日志记录,以及运行一个目标。当你编写自
定义插件的时候,你会要扩展AbstractMojo。AbstractMojo处理setLog()和getLog()的
实现,并包含一个抽象的execute()方法。在你扩展AbstractMojo的时候,你所需要做的
只是实现execute()方法。
每一个mojo需要一个独立标识

echo表示该mojo的入口
3.一个简单的mojo
package org.sonatype.mavenbook.plugins;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;

public class EchoMojo extends AbstractMojo
{

private Object message;
public void execute()
throws MojoExecutionException, MojoFailureException
{
getLog().info( message.toString() );
}
}

@requiresProject false可以让mojo编译后在任意目录下执行
进到工程存放目录下mvn install后,就可以在命令行
$ mvn org.codehaus.mojo:first-maven-plugin:1.0-SNAPSHOT:echo
就会打印出Hello Maven World...
4.配置插件前缀
在命令行声明groupId,artifactId,version和goal十分麻烦。为了处理这个问题,Maven为插件分配了前缀。
在总控pom.xml中配上



maven-plugin-plugin

first




就可以在命令行中执行
mvn first:echo
5.传递参数

private Object message;

maven提供了一种用注释传递参数的方法,非常强大。变量${echo.message}的值为NULL时,就会使用
default-value的值,此时private Object message = "Hello Maven World..."
也可以通过调用该mojo时将参数传进来,方法如下:
在另外一个mojo的总控pom.xml中配置如下片段:

org.codehaus.mojo
first-maven-plugin
1.0


mymojo
process-resources

echo


I love you!!