1. 程式人生 > 實用技巧 >開發一個簡單的maven plugin

開發一個簡單的maven plugin

maven plugin 的開發還是比較清晰以及簡單的,因為maven 提供了自己的ioc 以及開發約定,同時社群也有比較多的擴充套件
我們都是可以參考學習的,官方也還算清晰

簡單說明

如果需要開發maven 外掛我們需要做的就是開發自己的mojo,同時配置一些引數註解,因為很多時候我們需要依賴外部服務(maven core)
所以需要基於maven mojo 的ioc 模型注入依賴的服務(project。。。)

一個參考資料

  • 專案結構

  • maven 外掛約定
    命名推薦的格式: <name>-maven-plugin,
    packaging: maven-plugin
  • 基本依賴
    因為開發需要依賴maven plugin api 的註解以及maven-plugin-api 所以一般都需要依賴新增這幾個依賴,同時
<dependencies>
  <dependency>
    <groupId>org.apache.maven</groupId>
    <artifactId>maven-plugin-api</artifactId>
    <version>3.0</version>
  </dependency>
  <!-- dependencies to annotations -->
  <dependency>
    <groupId>org.apache.maven.plugin-tools</groupId>
    <artifactId>maven-plugin-annotations</artifactId>
    <version>3.4</version>
    <scope>provided</scope>
  </dependency>
</dependencies>
  • mojo 簡單程式碼
    實現AbstractMojo ,同時新增Mojo 註解,name 就是我們呢的goal
package com.dalong.plugin;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugin.logging.Log;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
/*
   @author dalongrong
 */
@Mojo(name = "dalong")
public class MyPlugin extends AbstractMojo{
  @Parameter(property = "username",defaultValue = "dalong")
  private String username;
  Log log;
  public MyPlugin(){
    this.log=getLog();
   }
  public void setUsername(String username) {
    this.username = username;
   }
  public void execute() throws MojoExecutionException, MojoFailureException {
    log.debug("print username");
    log.debug(this.username);
   }
}
  • 外掛使用
<?xml version="1.0" encoding="UTF-8"?>
<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">
  <parent>
    <artifactId>mymaven-plugin</artifactId>
    <groupId>com.dalong</groupId>
    <version>1.0-SNAPSHOT</version>
  </parent>
  <modelVersion>4.0.0</modelVersion>
  <artifactId>call-plugin</artifactId>
  <build>
    <plugins>
      <plugin>
        <groupId>com.dalong</groupId>
        <artifactId>pluginapp-maven-plugin</artifactId>
        <version>1.0-SNAPSHOT</version>
        <executions>
          <execution>
            <phase>compile</phase>
            <goals>
              <goal>dalong</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <username>dalongdemo appp test</username>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>
  • 執行效果

說明

以上是一個特別簡單的maven plugin 開發說明,實際我們需要依賴maven core 的一些api 進行擴充套件,同時會在不同的生命週期做不同的
處理

參考資料

http://maven.apache.org/plugin-developers/
http://maven.apache.org/guides/mini/guide-configuring-plugins.html
http://maven.apache.org/guides/plugin/guide-java-plugin-development.html
http://maven.apache.org/examples/maven-3-lifecycle-extensions.html