如何编写一个Maven插件
本文基于eclipse ee.
- 建立一个maven插件工程:
- 主要就是让项目能依赖maven-plugin-api:
- 编写一个Mojo类:
/**
* 用于输出消息的Mojo
* @goal hello
*/
public class HelloMojo extends AbstractMojo {
/**
* @parameter expression="${echo.message}" default-value="Hello Maven World..."
*/
private Object message;
public void execute() throws MojoExecutionException {
getLog().info(message.toString());
}
}
- 安装到本地 mvn install
- 运行插件:
- 但是对于上面我们运行插件时要写这么多<groupId>:<artifactId>:<version>:goal是一件比较痛苦的事,我们需要配置一个前缀来运行我们的插件,比如hello:hello即表示运行hello-mave-plugin的hello的目标:
配置M2_HOME/settings.xml添加插件组:
<pluginGroups>
<!-- 插件的groupId -->
<pluginGroup>org.idestiny.learn.maven</pluginGroup>
</pluginGroups>
于是你可以通过前缀来运行插件目标,那么mvn默认会以{prefix}-maven-plugin或maven-{prefix}-plugin去找对应的插件,在这里prefix即为hello:
那么如何在我们install我们的插件时就指定其前缀,而不是像上面这样,我们需要在build插件时,加上一个插件即可,加入配置到pom.xml:
<build>
<plugins>
<!-- 配置本插件的前缀, 则可以通过 abcd:hello 运行本插件目标hello -->
<plugin>
<artifactId>maven-plugin-plugin</artifactId>
<version>2.3</version>
<configuration>
<goalPrefix>abcd</goalPrefix>
</configuration>
</plugin>
</plugins>
</build>
- mvn install安装插件,运行插件abcd:hello:
具体其他一些api细节可以参考:
http://maven.apache.org/developers/mojo-api-specification.html
不吝指正。