Gradleのカスタムタスク

Gradleのカスタムタスク

1. 概要

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

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

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

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

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

上記のタスクの主な目的は、「Welcome in theexample!」というテキストを印刷することだけです。 gradle tasks –allコマンドを実行すると、このtask is availableかどうかを確認できます。

gradle tasks --all

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

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

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

gradle welcome

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

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

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

タスクを機能ごとにグループ化すると便利な場合があるため、タスクは1つのカテゴリに表示されます。 setgroup for our custom tasks, just by defining a group propertyをすばやく実行できます。

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

これで、Gradleコマンドを実行して使用可能なすべてのタスクを一覧表示すると(–allオプションはもう必要ありません)、新しいグループの下にタスクが表示されます。

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

ただし、タスクが何を担当しているかを確認することも他の人にとって有益です。 短い情報を含むcreate a descriptionを実行できます。

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

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

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

この種のタスク定義はad-hoc definitionと呼ばれます。

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

4. Gradle Task Type insidebuild.gradleを定義する

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

すぐにenable customization of the task by creating a task typeできます。 ビルドスクリプト内でタスクタイプが定義されるだけです。

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")
        }
    }
}

custom task type is a simple Groovy class which extends DefaultTask –標準タスクの実装を定義するクラス。 拡張できるタスクタイプは他にもありますが、ほとんどの場合、DefaultTaskクラスが適切な選択です。

このタスクのPrintToolVersionTasktask contains tool property which can be customized by instances

String tool

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

さらに、method annotated with @TaskAction. It defines what this task is doingが含まれています。 この簡単な例では、インストールされているJavaまたはGroovyのバージョンを出力します。指定されたパラメーター値に依存します。

作成されたタスクタイプに基づいてカスタムタスクを実行するには、create a new task instance of this typeを実行する必要があります。

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

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

  • 私たちのタスクはPrintToolVersionTaskタイプなので、when executed it’ll trigger the action defined in the method annotated with @TaskAction

  • PrintToolVersionTaskで使用されるカスタマイズされたツールプロパティ値(java)を追加しました

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

> Task :printJavaVersion
9.0.1

次に、インストールされているバージョンのGroovyを出力するタスクを作成しましょう。

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

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

> Task :printGroovyVersion
2.4.12

If we have not too many custom tasks, then we can define them directly in the build.gradle file(上記のように)。 ただし、数が多いと、build.gradleファイルが読みにくくなり理解しにくくなります。

幸いなことに、Gradleはそのためのソリューションを提供しています。

5. buildSrcフォルダーでタスクタイプを定義する

define task types in the buildSrc folder which is located at the root project levelできます。 Gradleは内部にあるものをすべてコンパイルし、ビルドスクリプトで使用できるように型をクラスパスに追加します。

以前に定義したタスクタイプ(PrintToolVersionTask)をbuildSrc/src/main/groovy/com/example/PrintToolVersionTask.groovyに移動できます。 移動したクラス.にいくつかのimports from Gradle APIを追加するだけです。

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

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

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

カスタムGradleプラグイン内でカスタムタスクタイプを定義できます。 以下で定義されているカスタムGradleプラグインを定義する方法を説明しているthis articleを参照してください。

  • build.gradleファイル

  • 他のGroovyクラスと同様にbuildSrcフォルダー

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

7. 結論

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

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