1. 程式人生 > 其它 >java開發maven外掛入門

java開發maven外掛入門

前言

在專案中我們使用到了大量的官方的maven外掛,如clean,compiler,今天我們自己開發一個外掛來更好的理解外掛的原理。

建立maven外掛專案

官方外掛命名的格式為 maven-xxx-plugin,非官方的外掛命名為 xxx-maven-plugin

修改pom檔案

<packaging>maven-plugin</packaging>

預設的打包型別為jar

<dependencies>
  <dependency>
    <groupId>org.apache.maven</groupId>
    <artifactId>maven-plugin-api</artifactId>
    <version>3.5.0</version>
  </dependency>

  <!-- dependencies to Java 5 annotations -->
  <dependency>
    <groupId>org.apache.maven.plugin-tools</groupId>
    <artifactId>maven-plugin-annotations</artifactId>
    <version>3.5</version>
    <scope>provided</scope>
  </dependency>
</dependencies>

新增上述依賴

<build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.6.0</version>
        <configuration>
          <source>11</source>
          <target>11</target>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-plugin-plugin</artifactId>
        <version>3.6.0</version>
      </plugin>
    </plugins>
  </build>

新增外掛依賴,預設的plugin外掛版本為3.2,不支援註解

開發外掛

import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;

@Mojo(name = "first")
public class MyFirstMojo extends AbstractMojo {

  @Parameter(name = "name", defaultValue = "lisi")
  private String name;

  @Parameter(name = "address", property = "address", defaultValue = "上海")
  private String address;

  public void execute() throws MojoExecutionException, MojoFailureException {
    getLog().info("this is a test plugin," + name + " " + address);
  }
}

定義一個類繼承AbstractMojo ,使用註解Mojo修飾,表示這是一個Mojo,每個Mojo實現一個goal,一個外掛就是由一系列Mojo構成的。
註解Parameter用來定義引數,property 表示可以從專案屬性中取值。外掛專案install之後,本地其他專案就可以使用了。

使用外掛

<plugin>
        <groupId>com.imooc</groupId>
        <artifactId>maven-plugin-first</artifactId>
        <version>1.0-SNAPSHOT</version>
        <configuration>
          <name>lisi2</name>
        </configuration>
</plugin>

點選之後會輸出

我們也可以繫結到指定的生命週期階段執行

<plugin>
        <groupId>com.imooc</groupId>
        <artifactId>maven-plugin-first</artifactId>
        <version>1.0-SNAPSHOT</version>
        <executions>
          <execution>
            <phase>compile</phase>
            <goals>
              <goal>first</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <name>lisi2</name>
        </configuration>
      </plugin>
    </plugins>

在編譯時自動執行

參考

【Maven】maven 外掛開發實戰
Maven外掛開發