カスタムGradleプラグインを書く

1.はじめに

Gradleは非常にポピュラーなビルドツールで、カスタマイズ性の高いビルドプロセスでよく知られています。

今日はカスタムGradleプラグインを作成する方法をお見せしましょう。それは標準的な設定で達成できるものを超えてビルドプロセスを変更することを可能にします。

2プラグインのソースの場所

コードをいくつかの異なる場所に配置することができます。それらのすべてには、いくつかの長所と短所があります。

2.1. ビルドスクリプト

プラグインのソースコードをビルドスクリプト自体の中に入れることができます。これで自動コンパイルとプラグインのインクルードができます。

  • 非常に単純ですが、私たちのプラグインはビルドスクリプトの外には表示されません。** そのため、他のビルドスクリプトでそれを再利用することはできません。

2.2. BuildSrc フォルダ

私たちが使用できるもう一つの可能​​性は buildSrc/src/main/java フォルダーに私たちのプラグインのソースコードを置くことです。

Gradleを実行すると、 buildSrc フォルダの存在を確認します。もしそれが存在すれば、Gradleは自動的に私たちのプラグインをビルドしてインクルードします。

  • これにより、さまざまなビルドスクリプト間でプラグインを共有することができますが、それでも他のプロジェクトで使用することはできません。

2.3. スタンドアロンプ​​ロジェクト

最後に、プラグインをさまざまなプロジェクトで完全に再利用できるようにする別のプロジェクトとしてプラグインを作成できます。

ただし、外部プロジェクトで使用するには、jarファイルにまとめてプロジェクトに追加する必要があります。

3私たちの最初のプラグイン

基本から始めましょう - ** Gradleプラグインはすべて com.gradle.api.Plugin インターフェースを実装する必要があります

インターフェースは汎用的なので、さまざまな種類のパラメータを使ってパラメータ化することができます。通常、パラメータタイプは org.gradle.api.Project. です。

ただし、プラグインが異なる有効期間フェーズで適用されるように、異なる型パラメータを使用することができます。

  • org.gradle.api.Settings を使用すると、にプラグインが適用されます。

設定スクリプト ** org.gradle.api.Gradle を使用すると、プラグインが

初期化スクリプト

私たちが作成できる最も簡単なプラグインは hello world アプリケーションです。

public class GreetingPlugin implements Plugin<Project> {
    @Override
    public void apply(Project project) {
        project.task("hello")
          .doLast(task -> System.out.println("Hello Gradle!"));
    }
}

ビルドスクリプト内に次の行を追加して適用できます。

apply plugin: GreetingPlugin

gradle helloを呼び出した後、 「Hello Gradle」__というメッセージがログに表示されます。

4プラグイン設定

ほとんどのプラグインはビルドスクリプトから外部設定にアクセスする必要があります。

これを行うには、 extension objects を使います。

public class GreetingPluginExtension {
    private String greeter = "Baeldung";
    private String message = "Message from the plugin!"
   //standard getters and setters
}

それでは、新しい extension object をプラグインクラスに追加しましょう。

@Override
public void apply(Project project) {
    GreetingPluginExtension extension = project.getExtensions()
      .create("greeting", GreetingPluginExtension.class);

    project.task("hello")
      .doLast(task -> {
          System.out.println(
            "Hello, " + extension.getGreeter());
          System.out.println(
            "I have a message for You: " + extension.getMessage());
      });
}

さて、 gradle helloを呼び出すと、 GreetingPluginExtensionに定義されているデフォルトのメッセージが表示されます。

しかし、拡張機能を作成したので、ビルドスクリプト内でクロージャを使用してそれを実行できます。

greeting {
    greeter = "Stranger"
    message = "Message from the build script"
}

5スタンドアロンプ​​ラグインプロジェクト

スタンドアロンのGradleプラグインを作成するには、もう少し作業が必要です。

5.1. セットアップ

まず、Gradle APIの依存関係をインポートする必要があります。これは非常に簡単です。

dependencies {
    compile gradleApi()
}

Gradleリポジトリから、Mavenで同じことをするには gradle-tooling-api 依存関係が必要であることに注意してください。

<dependencies>
    <dependency>
        <groupId>org.gradle</groupId>
        <artifactId>gradle-tooling-api</artifactId>
        <version>3.0</version>
    </dependency>
    <dependency>
        <groupId>org.gradle</groupId>
        <artifactId>gradle-core</artifactId>
        <version>3.0</version>
        <scope>provided</scope>
    </dependency>
</dependencies>
<repositories>
    <repository>
        <id>repo.gradle.org</id>
        <url>https://repo.gradle.org/gradle/libs-releases-local/</url>
    </repository>
</repositories>

5.2. プラグインの配線

Gradleがスタンドアロンプ​​ラグインの実装を見つけられるようにするには、 __ src/main/resources/META-INF/ gradle -plugins__にプロパティファイルを作成する必要があります。

リソースファイルは、プラグインIDと一致する名前を持つ必要があります。 だから私たちのプラグインが org.baeldung.greetingのidを持っているなら、 ファイルの正確なパスは META-INF/gradle-plugins/org.baeldung.greeting.properties . になる

次に、プラグインの実装クラスを定義します。

    implementation-class=org.gradle.GreetingPlugin

implementation-class は、プラグインクラスの完全なパッケージ名と同じでなければなりません。

5.3. プラグインIDの作成

GradleにはプラグインIDが従うべき規則と規則がいくつかあります。それらのほとんどは、Javaのパッケージ名規則に似ています。

  • 英数字「。」と「 - 」のみ使用できます。

  • idには、ドメイン名とドメイン名を区切る「。」が少なくとも1つ必要です。

プラグイン名 ** 名前空間 org.gradle com.gradleware は制限されています

  • idは「。」で始まったり終わったりすることはできません。

  • 2つ以上の連続した「。」文字は使用できません

最後に、プラグインIDは逆ドメイン名の慣例に従う小文字の名前であるべきという慣習があります。

Javaパッケージ名とGradleプラグイン名の主な違いは、パッケージ名は通常プラグインIDよりも詳細な点です。

5.4. 公開プラグイン

外部プロジェクトで再利用できるようにプラグインを公開したい場合、それを実現する方法は2つあります。

まず、 プラグインJARを Maven Ivy . などの外部リポジトリに公開できます。

あるいは、Gradleプラグインポータルを使用することもできます。これにより、幅広いGradleコミュニティからプラグインにアクセスできるようになります。 Gradleリポジトリへのプロジェクトの公開に関する詳細は、https://plugins.gradle.org/docs/submit[Gradle Plugin Portal Documentation]にあります。

5.5. Java Gradle開発プラグイン

プラグインをJavaで書いているときは、 Java Gradle Development Plugin の恩恵を受けることができます。

これは自動的に gradleApi() 依存関係をコンパイルして追加します。また、 gradle jar タスクの一部としてプラグインメタデータの検証も実行します。

ビルドスクリプトに次のブロックを追加することでプラグインを追加できます。

plugins {
    id 'java-gradle-plugin'
}

6. テストプラグイン

プラグインが正しく機能し、 Projectに正しく適用されたことをテストするには、 org.gradle.testfixtures.ProjectBuilder を使用して Project__のインスタンスを作成します。

その後、プラグインが適用され、適切なタスクが Project インスタンスに存在するかどうかを確認できます。これを行うには、標準の JUnit テストを使用できます。

@Test
public void greetingTest(){
    Project project = ProjectBuilder.builder().build();
    project.getPluginManager().apply("com.baeldung.greeting");

    assertTrue(project.getPluginManager()
      .hasPlugin("com.baeldung.greeting"));

    assertNotNull(project.getTasks().getByName("hello"));
}

7. 概要

この記事では、Gradleでカスタムプラグインを書くための基本を説明しました。プラグインの作成についてさらに詳しく調べるには、https://docs.gradle.org/current/userguide/custom__plugins.html[Gradle Documentation]を参照してください。

そして、いつものように、すべてのコードサンプルはhttps://github.com/eugenp/tutorials/tree/master/gradle[Githubに追加]を見つけることができる

"

  • «** 前へ