Apache Maven
Mavenプラグインの作成
サーチ…
前書き
Mavenでは、カスタムプラグインを実装して使用することができます。これらのプラグインを使用すると、Mavenライフサイクルのあらゆるフェーズに追加の動作をバインドすることができます。
各Mavenの目標は、MOJO(Maven Ordinary Java Object)を実装することによって作成されます。これは、呼び出す方法を説明する注釈で実装されたJavaクラスです。
プラグインの目標プレフィックスは、アーティファクト名から導出されます。 artifact hello-world-plugin
は、目標プレフィックスhello-world
作成しhello-world
。 hello
目標は、 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;