伴隨着日常開發的需要,我們可能需要用到的maven插件,這些插件一部分可以去網上下載,一部分可以去問下公司裏面的前輩們,可是還有第三種情況的時候,比如我們需要特殊服務的時候,就需要自定義編寫maven插件了來滿足我們的開發需求了
下面簡單介紹一下如何編寫自己的maven插件
在編寫maven插件時候有兩點需要注意:
第一:編寫插件pom.xml
第二:編寫真正做事情的插件java類
接下來先看pom.xml文件的內容:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>sample.plugin</groupId>
<artifactId>hello-maven-plugin</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>maven-plugin</packaging>
<name>hello-maven-plugin</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
<version>2.0</version>
</dependency>
</dependencies>
</project>
這個pom.xml文件要注意兩點,
1).一個就是<packaging>的類型,應該是maven-plugin
2).一個就是Maven插件項目必須依賴一個插件maven-plugin-api
接下來我們再來看客戶端提供的“特殊Maven服務"的類插件類必須繼承org.apache.maven.plugin.AbstractMojo
其實我們的maven插件是嵌入很多的Mojo的
接下來看具體代碼吧
package sample.plugin;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
/**
* @goal info
* @phase compile
* @requireProject false
* @author cxb
* 2013-3-5 下午03:01:19
*/
public class GreetingMojo extends AbstractMojo{
/**
* @parameter expression="${name}"
* @required
*/
String name;
/**
* @parameter expression="${age}"
* @required
*/
int age;
/**
* @parameter expression="${isOk}"
* @required
*/
boolean isOk;
public void execute() throws MojoExecutionException, MojoFailureException {
getLog().info(this.toString());
}
@Override
public String toString() {
return "String is : \"" + name + "\"" + "int is : \"" + age + "\""
+ "boolean is : \"" + isOk + "\"";
}
}
這裏面的一些註解比較有意思哦,可別以爲它是普通的註釋信息,Maven編譯的時候不會忽略這些註釋信息的,這些註釋信息暗含了該插件的執行信息。
@goal info:表示該插件的服務目標
@phase compile:表示該插件的生效週期階段
@requiresProject false:表示是否依託於一個項目才能運行該插件
@parameter expression="${name}":表示插件參數,使用插件的時候會用得到
@required:代表該參數不能省略
3)使用自定義插件
使用插件之前先進行安裝install
之後在執行如下命令:
sample.plugin:hello-maven-plugin:info -Dname=chen -Dage=25 -DisOk=true