Maven插件开发

Mojo是 Maven plain Old Java Object。在Maven里面,每一个mojo都是一个可执行的goal。一个插件由一个或者多个相关的mojo组成。

• 你的第一个Mojo,学习编写第一个插件

这里介绍如何为Maven2.0开发Java插件。

+ 第一个插件

在这一段,我们将建造一个简单的插件,这个插件没有参数,只是在运行时简单的在屏幕上显示一条信息。沿着这个方法,我们将学到创建一个插件项目的基础步骤,一个Java mojo的最小内容,一组执行mojo的方法。

用最简单的方法,一个Java mojo由单个class来组成。不像EJBs那样需要多个类,一个插件由一定数理的同类mojos组成,就如使用一个抽象的超类,对所有的mojos统一代码。

一个简单的Mojo

下面是一个没有参数的简单mojo类。这已经是最简单的mojo类了。

package sample.plugin;

import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;

/**
* Says "Hi" to the user.
* @goal sayhi
*/
public class GreetingMojo extends AbstractMojo
{
public void execute() throws MojoExecutionException
{
getLog().info("Hello, world.");
}
}

+ Maven插件项目定义

例子:

<project>
<modelVersion>4.0.0</modelVersion>
<groupId>sample.plugin</groupId>
<artifactId>maven-hello-plugin</artifactId>
<packaging>maven-plugin</packaging>
<version>1.0-SNAPSHOT</version>
<name>Sample Parameter-less Maven Plugin</name>
<dependencies>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
<version>2.0</version>
</dependency>
</dependencies>
</project>

+ 建造目标

compile Compiles the Java code for the plugin and builds the plugin descriptor
test Runs the plugin’s unit tests
package Builds the plugin jar
install Installs the plugin jar in the local repository
deploy Deploys the plugin jar to the remote repository

+ 执行插件

在建造过程中执行:

<build>
<plugins>
<plugin>
<groupId>sample.plugin</groupId>
<artifactId>maven-hello-plugin</artifactId>
<version>1.0-SNAPSHOT</version>
</plugin>
</plugins>
</build>

通过命令行执行的方法:

mvn groupID:artifactID:version:goal

+ 缩短命令行

• 如果你使用的某插件的最新版本,可省略到版本号
• “maven-$name-plugin” 和 “$name-maven-plugin”这类名字的插件,有特殊待遇。在输入时,只需输入$name代表的字符串就可以执行。执行时,如果没有找到相应的插件,还会继续添加maven和plugin两个字符串的插件。
• 最后,你可以添加插件的groupId到 ${user.home}/.m2/settings.xml文件,是的该groupId作为缺省的groupId,下面是一个例子:

<pluginGroups>
<pluginGroup>sample.plugin</pluginGroup>
</pluginGroups>

+ 在指定的声明周期内加入Mojo

<build>
<plugins>
<plugin>
<groupId>sample.plugin</groupId>
<artifactId>maven-hello-plugin</artifactId>
<version>1.0-SNAPSHOT</version>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>sayhi</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

+ Mojo 的原型

mvn archetype:create \
-DgroupId=sample.plugin \
-DartifactId=maven-hello-plugin \
-DarchetypeGroupId=org.apache.maven.archetypes \
-DarchetypeArtifactId=maven-archetype-mojo

+ 参数

参数可以在 Mojo 里面定义,定义的方式如下:

/**
* The greeting to display.
*
* @parameter expression="${sayhi.greeting}" default-value="Hello World!"
*/
private String greeting;

或者在一个项目中定义:

<plugin>
<groupId>sample.plugin</groupId>
<artifactId>maven-hello-plugin</artifactId>
<version>1.0-SNAPSHOT</version>
<configuration>
<greeting>Welcome</greeting>
</configuration>
</plugin>

+ 参数的类型

Boolean, Integer, Double, Date, File/Directory, URL, Plain Text( char, Character, StringBuffer, and String), Array, Collection, Map, Properties, Other Object.

+ 关于 Setters

编写可重用的Mojo,可以在 Maven 外部使用。

This entry was posted in Maven and tagged . Bookmark the permalink.

Leave a Reply