1.建立一个普通的maven项目,如:mvn archetype:create -DgroupId=groupId -DartifactId=artifactId
2.在项目的pom.xml中添加或编辑打包方式:<packaging>maven-plugin</packaging>
3.在pom.xml中添加开发插件需要的依赖:
<dependencies>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
<version>3.2.2</version>
</dependency>
<dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-annotations</artifactId>
<version>3.3</version>
</dependency>
</dependencies>
4.建立Mojo
Maven中执行的插件的每个goal都是一个Mojo,示例:
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import java.io.File;
import java.net.URL;
import java.util.Date;
/**
* User: Administrator
* Date: 14-7-13 下午5:20
*/
@Mojo(name = "advance")
public class AdvanceGoal extends AbstractMojo {
@Parameter
private String myString;
@Parameter
private boolean myBoolean;
@Parameter
private int myInteger;
@Parameter
private Double myDouble;
@Parameter
private Date myDate;
@Parameter
private File myFile;
@Parameter
private URL myUrl;
@Override
public String toString() {
return "AdvanceGoal{" +
"myString='" + myString + '\'' +
", myBoolean=" + myBoolean +
", myInteger=" + myInteger +
", myDouble=" + myDouble +
", myDate=" + myDate +
", myFile=" + myFile +
", myUrl=" + myUrl +
'}';
}
@Override
public void execute() throws MojoExecutionException, MojoFailureException {
getLog().info("My Advance Mojo *--* !!!");
getLog().info(toString());
getLog().info("My Advance Mojo *--* !!!");
}
}
上面的代码定义了一个名字为“advance”的mojo,它就是插件的一个goal,并且通过注解@Parameter定义了可接受的参数。
5.执行mvn install 将插件安装到本地库,之后就可以使用了。6.使用示例:
在自己的项目(要使用插件的项目)中添加插件的依赖:
<build>
<plugins>
<plugin>
<groupId>groupId</groupId>
<artifactId>artifactId</artifactId>
<version>1.0</version>
<configuration>
<myString>stringvalue</myString>
<myBoolean>false</myBoolean>
<myDate>2005-10-06 2:22:55.1</myDate>
<myDouble>10.1</myDouble>
<myInteger>10</myInteger>
<myUrl>http://maven.apache.org</myUrl>
<myFile>C:\Users\Administrator\Desktop\a.txt</myFile>
</configuration>
<executions>
<execution>
<id>first</id>
<phase>compile</phase>
<goals>
<goal>advance</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
其中<configuration>内的节点名需要和代码中
@
Parameter参数注解的属性名一致;其中的
<phase>compile</phase>表示此插件在compile阶段引入,
<phase>的取值必须是maven构建生命周期其中的值,maven是一个以构建周期为轴线的工程,插件可以附加到其构建周期中的某些阶段上。
验证:执行:mvn compile,输出:
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Demo-default 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- mymvnplugin:1.0:advance (first) @ Demo ---
[INFO] My Advance Mojo *--* !!!
[INFO] AdvanceGoal{myString='stringvalue', myBoolean=false, myInteger=10, myDouble=10.1, myDate=Thu.......
[INFO] My Advance Mojo *--* !!!
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS