【轉載】如何編寫maven plugin (一) 基礎

    當maven內置的功能不能知足需求的時候怎麼辦?那隻能給它寫插件了。 java

    網絡上不少maven的文章,但基本不多談及如何給它寫插件,即便你搜索maven plugin,也只是給你返回一堆如何使用maven插件的文章。但願這邊文章能給一些maven使用者帶來幫助。我在這裏先假設你已經懂得使用maven,我不會貼出完整的pom.xml文件 apache

      首先,你須要建立一個maven項目,插件是一種特殊的maven項目
而後修改pom.xml,將packaging改成maven-plugin api

<packaging>maven-plugin</packaging>

經過properties定義maven的版本 網絡

<properties>
	<maven.version>2.2.1</maven.version>
</properties>

    maven3已經出了好久,而且兼容maven2,可是我這裏編寫插件使用的是maven2,能夠同時在maven2和maven3下使用,不過其實這個緣由並不重要,真正的緣由是由於maven3的代碼實在太爛了,最初的時候我用maven3的api lib來寫,發現裏面不少代碼根本沒有註釋,並且不少代碼已經廢棄,可是並無明確說明究竟用什麼方法代替。最後我使用了maven2中被maven3廢棄的api來完成個人功能,跑的挺好的,就是有時可能會有一些使用準備廢棄的api的提醒而已。 eclipse

接着添加依賴 maven

<dependencies>
	<dependency>
		<groupId>org.apache.maven</groupId>
		<artifactId>maven-plugin-api</artifactId>
		<version>${maven.version}</version>
	</dependency>
	<dependency>
		<groupId>org.apache.maven</groupId>
		<artifactId>maven-core</artifactId>
		<version>${maven.version}</version>
	</dependency>
</dependencies>

而後開始建立Mojo類,maven插件裏面每個具體的功能都是一個Mojo
好比說eclipse:clean和eclipse:eclipse就是兩個Mojo 測試

/**
 * @goal helloWorld
 */
public class HelloWorldMojo extends AbstractMojo {
    public void execute() throws MojoExecutionException
    {
        getLog().info("Hello, world!");
    }
}

首先繼承AbstractMojo,而且實現execute()方法,這個就是每次調用進入的地方
而後須要在類的Javadoc上定義,這是一個annotation出來以前經常使用的定義方法(或許將來maven會將它改爲annotation,那就能提供編譯校驗和IDE校驗)。咱們必須定義@goal,表明運行目標,簡單來講就是eclipse:clean中的clean
Mojo寫在哪一個package底下都是能夠的 ui

這樣,咱們就完成了一個簡單的maven plugin,而後咱們須要一個簡單的測試來肯定他正確運行
先經過maven install將它安裝到本地倉庫 spa

而後打開任意maven的項目(好比說咱們原來已經在用maven的項目),在pom.xml增長一個plugin .net

<build>
    <plugins>
      <plugin>
        <groupId>xxx</groupId>
        <artifactId>xxx</artifactId>
        <version>xxx</version>
        <executions>
          <execution>
            <phase>compile</phase>
            <goals>
              <goal>helloWorld</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

須要留意的是phase部分,咱們將這個plugin綁定到compile這個週期
而後咱們運行mvn compile,就能成功看見Hello, world!輸出
(固然你也能夠直接經過命令行運行,須要帶上完整的groupId和artifactId才能調用)

http://blog.csdn.net/bluishglc/article/details/6632280  

http://fableking.iteye.com/blog/1549466

相關文章
相關標籤/搜索