再續maven 編寫自己的maven插件

伴隨着日常開發的需要,我們可能需要用到的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









發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章