Gradleのカスタムタスク

1概要

この記事では、Gradleでカスタムタスクを作成する方法について説明します。

ビルドスクリプトまたはカスタムタスクタイプを使用して新しいタスク定義を表示します。

Gradleの紹介は この記事 をご覧ください。 Gradleの基本と、この記事で最も重要なことはGradleタスクの紹介です。

2 build.gradle 内のカスタムタスク定義

わかりやすいGradleタスクを作成するには、その定義を build.gradle ファイルに追加する必要があります。

task welcome {
    doLast {
        println 'Welcome in the Baeldung!'
    }
}

上記のタスクの主な目的は、「Welcome to the Baeldung!」というテキストを印刷することです。 gradle tasks –all commandを実行することで、この タスクが利用可能か を確認できます。

gradle tasks --all

タスクは、グループ その他のタスク の下のリストにあります。

Other tasks
-----------
welcome

他のGradleタスクと同じように実行できます。

gradle welcome

出力は予想どおりです - 「Welcome to the Baeldung!」というメッセージ。

注意: all__オプションが設定されていない場合、「その他」のカテゴリに属する​​タスクは表示されません。カスタムGradleタスクは「その他」とは異なるグループに属することができ、説明を含めることができます。

3グループと説明を設定

タスクを機能別に分類すると便利な場合があるので、1つのカテゴリの下に表示されます。グループプロパティを定義するだけで、カスタムタスク用のgroupをすばやく 設定 ** できます。

task welcome {
    group 'Sample category'
    doLast {
        println 'Welcome on the Baeldung!'
    }
}

利用可能なすべてのタスクを一覧表示するためにGradleコマンドを実行すると( – all オプションは不要になりました)、タスクが新しいグループの下に表示されます。

Sample category tasks
---------------------
welcome

ただし、あるタスクがどのような責任を負っているのかを他の人が確認することも有益です。短い情報を含む説明を作成することができます。

task welcome {
    group 'Sample category'
    description 'Tasks which shows a welcome message'
    doLast {
        println 'Welcome in the Baeldung!'
    }
}

利用可能なタスクのリストを印刷すると、出力は次のようになります。

Sample category tasks
---------------------
welcome - Tasks which shows a welcome message

この種のタスク定義は アドホック定義 と呼ばれます。

さらに進んで、定義を再利用できるカスタマイズ可能なタスクを作成することは有益です。タイプからタスクを作成する方法と、このタスクのユーザーがカスタマイズを利用できるようにする方法について説明します。

4 build.gradle 内にGradleタスクタイプを定義する

上記の「ようこそ」タスクはカスタマイズできないため、ほとんどの場合、あまり便利ではありません。実行できますが、別のプロジェクト(またはサブプロジェクト)で実行する必要がある場合は、その定義をコピーして貼り付ける必要があります。

タスクタイプを作成することで、タスクのカスタマイズを素早く有効にすることができます。ただ、タスクタイプはビルドスクリプトの中で定義されています。

class PrintToolVersionTask extends DefaultTask {
    String tool

    @TaskAction
    void printToolVersion() {
        switch (tool) {
            case 'java':
                println System.getProperty("java.version")
                break
            case 'groovy':
                println GroovySystem.version
                break
            default:
                throw new IllegalArgumentException("Unknown tool")
        }
    }
}
  • カスタムタスクタイプは、 DefaultTask ** を拡張する単純なGroovyクラスです。これは標準のタスク実装を定義するクラスです。

拡張できるタスクタイプは他にもありますが、ほとんどの場合、 DefaultTask クラスが適切な選択です。

PrintToolVersionTask タスクには、このタスクのインスタンス によってカスタマイズできるツールプロパティが含まれています。

String tool

必要なだけプロパティを追加できます。これは単純なGroovyクラスフィールドです。

さらに、 @ TaskAction というアノテーションが付けられた メソッドが含まれています。このタスクが何をしているのかを定義します 。この簡単な例では、インストールされたJavaまたはGroovyのバージョンを表示します - 与えられたパラメータ値に依存します。

作成したタスクタイプに基づいてカスタムタスクを実行するには、 このタイプの新しいタスクインスタンスを 作成する必要があります。

task printJavaVersion(type : PrintToolVersionTask) {
    tool 'java'
}

最も重要な部分は以下のとおりです。

  • 私たちのタスクは PrintToolVersionTask タイプです。

@ TaskAction のアノテーションが付けられたメソッドで定義されたアクションを起動します 使用されるカスタマイズされたツールプロパティ値( java )を追加しました

PrintToolVersionTask による

上記のタスクを実行したときの出力は期待どおりです(インストールされているJavaのバージョンによって異なります)。

> Task :printJavaVersion
9.0.1

それでは、Groovyのインストール済みバージョンを印刷するタスクを作成しましょう。

task printGroovyVersion(type : PrintToolVersionTask) {
    tool 'groovy'
}

これは前に定義したのと同じタスクタイプを使用しますが、ツールプロパティ値が異なります。このタスクを実行すると、Groovyのバージョンが表示されます。

> Task :printGroovyVersion
2.4.12
  • カスタムタスクがそれほど多くない場合は、(上記のように) build.gradle ファイルで直接定義できます** 。ただし、数が多い場合は、 _ build . _ gradleファイルが読みにくくなり、理解しにくくなります。

幸いなことに、Gradleはそのためのいくつかの解決策を提供しています。

5 buildSrc フォルダーにタスクタイプを定義します

ルートプロジェクトレベルにある buildSrc フォルダーにタスクタイプを定義できます。 Gradleは内部にあるすべてのものをコンパイルし、クラスパスに型を追加して私たちのビルドスクリプトがそれを使えるようにします。

以前に定義したタスクタイプ( PrintToolVersionTask )は、 buildSrc/src/main/groovy/com/baeldung/PrintToolVersionTask.groovy に移動できます。 Gradle APIからのいくつかのインポートを移動クラスに追加するだけです。

buildSrc フォルダーには、無制限のタスクタイプを定義できます。保守、読みやすく、タスクタイプの宣言はタスクのインスタンス化と同じ場所にはありません。

これらの型は、ビルドスクリプトで直接定義された型を使用するのと同じ方法で使用できます。適切なインポートを追加することだけを忘れないでください。

6. プラグインでタスクタイプを定義する

カスタムGradleプラグイン内でカスタムタスクタイプを定義できます。 この記事 を参照してください。これはカスタムGradleプラグインを定義する方法を説明したものです。

  • build.gradle ファイル

他のGroovyクラスとして** buildSrc フォルダー

これらのカスタムタスクは、このプラグインへの依存関係を定義したときにビルドで使用可能になります。カスタムタスクタイプだけでなく、アドホックタスクも利用可能です。

7. 結論

このチュートリアルでは、Gradleでカスタムタスクを作成する方法について説明しました。

build.gradle ファイルで使用できる多数のプラグインがあり、それらはあなたが必要とする多くのカスタムタスクタイプを提供します。

いつものように、コードスニペットはhttps://github.com/eugenp/tutorials/tree/master/gradle[over on Github]から入手できます。