サーチ…


前書き

Mavenでは、カスタムプラグインを実装して使用することができます。これらのプラグインを使用すると、Mavenライフサイクルのあらゆるフェーズに追加の動作をバインドすることができます。

各Mavenの目標は、MOJO(Maven Ordinary Java Object)を実装することによって作成されます。これは、呼び出す方法を説明する注釈で実装されたJavaクラスです。

プラグインの目標プレフィックスは、アーティファクト名から導出されます。 artifact hello-world-pluginは、目標プレフィックスhello-world作成しhello-worldhello目標は、 mvn hello-world:helloで実行できます。

備考

Mavenプラグインは、プラグインのメタデータを記述するmaven/plugins.xmlを含むJARです。このファイルは、 maven-plugin-pluginによって生成されmaven-plugin-plugin

MavenアーチファクトをMavenプラグインとして宣言する

Mavenによって構築された成果物は、 pom.xmlパッケージをmaven-pluginとして指定することで、Mavenプラグインとして宣言することができます。

<packaging>maven-plugin</packaging>

プラグインAPIとアノテーションに依存関係を宣言する必要があります。

<dependency>
    <groupId>org.apache.maven</groupId>
    <artifactId>maven-plugin-api</artifactId>
    <version>3.3.9</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.apache.maven.plugin-tools</groupId>
    <artifactId>maven-plugin-annotations</artifactId>
    <version>3.5</version>
    <scope>provided</scope>
</dependency>

メタデータを生成するには、プラグインを追加する必要があります。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-plugin-plugin</artifactId>
    <version>3.5</version>
</plugin>

目標を作成する

目標は、MOJOを作成することによって実装されます。これは、 maven-plugin-annotations注釈で注釈が付けられたクラスファイルです。

@Mojo(name = "hello")
public final class HelloWorldMojo extends AbstractMojo {

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

プラグイン設定の使用

プラグインは@Parameterフィールドに注釈を付けることで設定できます。 MOJOに設定が注入されます。

@Mojo(name = "greet")
public final class GreetMojo extends AbstractMojo {

    @Parameter(required = true)
    public String name;

    public void execute() throws MojoExecutionException, MojoFailureException {
        getLog().info("Hello " + name);
    }
}

nameパラメータは、POMで設定できます。

<plugin>
    <groupId>com.mattunderscore</groupId>
    <artifactId>hello-world-plugin</artifactId>
    <version>1.0-SNAPSHOT</version>
    <configuration>
        <name>Matt</name>
    </configuration>
</plugin>

greet目標がスタンドアロンの目標として実行される場合、 nameパラメータはコマンドラインでプロパティとして定義できます。

mvn <plugin name>:greet -Dname=Geri

プロジェクト情報へのアクセス

プラグインは、とりわけ、ビルド中の現在のMavenプロジェクトに関する情報にアクセスすることができます。

@Mojo(name = "project")
public final class ProjectNameMojo extends AbstractMojo {

    @Parameter(defaultValue = "${project}", readonly = true, required = true)
    private MavenProject project;

    public void execute() throws MojoExecutionException, MojoFailureException {
        getLog().info("Hello, this is " + project.getName());
    }
}

上記の例では、実行されているMavenプロジェクトの名前がコンソールに出力されます。この名前はPOMの<project>/<name>要素で指定されています。

プラグインで使用されるMavenProjectクラスは、プラグインのPOMに(既定の) compileスコープを持つmaven-core依存関係が必要です。

<dependency>
    <groupId>org.apache.maven</groupId>
    <artifactId>maven-core</artifactId>
    <version>3.3.9</version>
</dependency>

さらに、 アノテーションを使用するには、プラグインのPOMに以下の依存関係が必要です。

<dependency>
  <groupId>org.apache.maven.plugin-tools</groupId>
  <artifactId>maven-plugin-annotations</artifactId>
  <version>3.5</version>
  <scope>provided</scope> <!-- annotations are needed only to build the plugin -->
</dependency>

目標のデフォルトフェーズを宣言する

@Mojo(name = "hi", defaultPhase = LifecyclePhase.COMPILE)

ビルドディレクトリをファイルとして取得する

@Parameter(defaultValue = "${project.build.directory}")
private File buildDirectory;


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow