LoginSignup
1
0

More than 1 year has passed since last update.

tasks.register()に渡す第二引数と第三引数に関するメモ

Last updated at Posted at 2023-02-12

Plugin<Project>を継承したクラスにてオーバーライドされるapply()では、タスクを登録することができる。

class CustomPlugin : Plugin<Project> {
    override fun apply(target: Project) {
        with(target) {
            tasks.register("customTaskName", CustomTask::class) {
                dependsOn(taskName)
                ...
            }
        }
    }
}

タスクを登録する際、Projecttasksプロパティのregister()を呼び出す。

第一引数には、タスク名を渡す。

ただ、第二引数に付けられた名前がtype : KClass<T>となっており、使われ方がよくわからなかった。

そして、第三引数として渡すブロックはconfigurationAction: Action<in T>となっていてますますわからない。

なので、調べてみることにした。

まず、第二引数として渡されるtypeなのだが、これはカスタムタスクの種類を表しているらしい。
もちろん、渡されるのはクラスだが名前はタイプとなっている。。。。ややこしい。

このクラスでは、Gradleタスクの実行に必要なプロパティやアクションなどが定義される。
つまり、DefaultTaskを継承しているクラスということだ。

このクラスのインスタンスは、Gradleビルドスクリプトによって作成される。

そして、第三引数のブロックだが、このブロックの内部でインスタンスのプロパティを独自に設定することができるようになっている。つまり、タスクを設定するために実行されるアクションである。

第二引数で渡されたクラスのインスタンスは、実際に必要とみなされたときに作成される。
そしてそのタイミングで第三引数のブロックが呼び出されてタスクに関する設定を行う。例えば、dependsOnを呼び出して依存しているタスクを指定するとか、プロパティを設定したりできる。

最終的に、登録されたタスクに定義されたアクションが、ビルドプロセスの一部として、ビルドの実行時に呼び出されることになる。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0