1. 概要

この記事では、Gradleカスタムタスクを作成する方法について説明します。 ビルドスクリプトまたはカスタムタスクタイプを使用して、新しいタスク定義を表示します。

Gradleの概要については、この記事を参照してください。 これには、Gradleの基本と、この記事で最も重要なことであるGradleタスクの概要が含まれています。

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

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

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

上記のタスクの主な目的は、「Welcome in theBaeldung!」というテキストを印刷することです。 このタスクが利用可能かどうかを確認するには、 gradle tasks –allコマンドを実行します。

gradle tasks --all

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

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

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

gradle welcome

出力は期待どおりです–「Baeldungへようこそ!」 メッセージ。

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

3. グループと説明を設定する

タスクを機能ごとにグループ化すると便利な場合があるため、タスクは1つのカテゴリに表示されます。 グループプロパティを定義するだけで、カスタムタスクの setグループをすばやく作成できます。

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. 内部でGradleタスクタイプを定義build.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 taskには、このタスクのインスタンスによってカスタマイズできるツールプロパティが含まれています。

String tool

必要な数のプロパティを追加できます。これは単純なGroovyクラスフィールドであることに注意してください。

さらに、それは含まれています @TaskActionで注釈が付けられたメソッド。 このタスクが何をしているのかを定義します 。 この簡単な例では、インストールされているJavaまたはGroovyのバージョンを出力します–指定されたパラメーター値によって異なります。

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

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

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

  • このタスクはPrintToolVersionTaskタイプであるため、を実行すると、@TaskActionアノテーションが付けられたメソッドで定義されたアクションがトリガーされます。
  • PrintToolVersionTask で使用されるカスタマイズされたツールプロパティ値( java )を追加しました

上記のタスクを実行すると、出力は期待どおりになります(インストールされている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に移動できます。 移動したクラスにGradleAPIからのインポートを追加するだけです。

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

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

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

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

  • build.gradleファイル
  • 他のGroovyクラスと同様にbuildSrcフォルダー

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

7. 結論

このチュートリアルでは、Gradleでカスタムタスクを作成する方法について説明しました。 build.gradle ファイルで使用できるプラグインが多数あり、必要なカスタムタスクタイプを多数提供します。

いつものように、コードスニペットはGithub利用できます。