Maven插件開發


Maven為我們提供了豐富的插件資源,使得開發調試過程中非常方便,可以滿足大多數場景下的需求。當然有時候,我們也需要根據需求定制自己的插件。下面是在開發Maven插件時的一點備忘錄,具體的開發流程請Google,有不少的教程,這里只是概述一下,同時記錄一些容易掉坑的點。

1,Maven的工具由一個又一個的插件組成的,插件類繼承了AbstractMojo類,需要覆寫execute方法。getLog()獲取的是AbstractMojo內部的log,類型是:org.apache.maven.plugin.logging.Log; 在Mojo的開發中,不要使用其他的Log基礎設施。注: Mojo = Maven Old Java Object;

public class Example extends AbstractMojo{  
    public void execute() throws MojoExecutionException, MojoFailureException {  
        getLog().info("Hello world");  
    }  
} 

2,pom.xml文件中,打包(packaging)類型應該為 maven-plugin,而不是war/jar。同時需要依賴的兩個核心依賴是:
3,開發Maven插件和開發普通的Maven工程的流程是一樣的,不同在於插件的 archetype應該設置為:maven-archetype-plugin;

  • maven-plugin-api:這是插件開發的api;
  • maven-plugin-annotations:這是進行插件注解的api。

4,插件的入口類為繼承了AbstractMojo的實現類,但是需要進行注解。注解@Mojo是必須要的,這是定義插件對象的啟動方法,由於該類只有一個方法,所以啟動方法和啟動類是一致的。在Maven 3之前是使用注釋注解:@goal doSomething這種方式。現在已經不使用這種方式了。舉個例子,如果進行如下標注:

@Mojo( name = "doSomething")
public class GreetingMojo extends AbstractMojo{
...
}

那么運行的時候使用如下方式執行:

mvn groupId:artifactId:version:doSomething  //如果一個項目中只有一個@Mojo標記,則verison可以省略

5,除了標注執行的方法,還可對成員變量進行標注,以便自動獲取或由用戶傳入參數。

@Parameter( property = "greeting", defaultValue = "Hello World!" )   //這是由用戶傳入的參數,可以在命令行中由-D參數傳入
private String greeting;
 
@Parameter( expression = "${project}", defaultValue = "${project}" )   //還可以使用表達式,引用Maven工程中定義好的變量
private String project;

6,每個Mojo(由@Mojo標注)都有生命周期,即該Mojo的執行時間。用戶可以選擇將某個插件目標綁定到生命周期的某個階段,從而讓構建過程更為完善。生命周期的具體介紹參考文末給出的文章。下面將插件配置到編譯階段執行:

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

總體來說Maven插件的開發思路還是比較清晰的。

參考資料:

  1. Guide to Developing Java Plugins
  2. maven的生命周期和插件
  3. Maven生命周期以及插件詳解

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM