Plugin<Project>
を継承したクラスにてオーバーライドされるapply()
では、タスクを登録することができる。
class CustomPlugin : Plugin<Project> {
override fun apply(target: Project) {
with(target) {
tasks.register("customTaskName", CustomTask::class) {
dependsOn(taskName)
...
}
}
}
}
タスクを登録する際、Project
のtasks
プロパティのregister()
を呼び出す。
第一引数には、タスク名を渡す。
ただ、第二引数に付けられた名前がtype : KClass<T>
となっており、使われ方がよくわからなかった。
そして、第三引数として渡すブロックはconfigurationAction: Action<in T>
となっていてますますわからない。
なので、調べてみることにした。
まず、第二引数として渡されるtype
なのだが、これはカスタムタスクの種類を表しているらしい。
もちろん、渡されるのはクラスだが名前はタイプとなっている。。。。ややこしい。
このクラスでは、Gradleタスクの実行に必要なプロパティやアクションなどが定義される。
つまり、DefaultTask
を継承しているクラスということだ。
このクラスのインスタンスは、Gradleビルドスクリプトによって作成される。
そして、第三引数のブロックだが、このブロックの内部でインスタンスのプロパティを独自に設定することができるようになっている。つまり、タスクを設定するために実行されるアクションである。
第二引数で渡されたクラスのインスタンスは、実際に必要とみなされたときに作成される。
そしてそのタイミングで第三引数のブロックが呼び出されてタスクに関する設定を行う。例えば、dependsOn
を呼び出して依存しているタスクを指定するとか、プロパティを設定したりできる。
最終的に、登録されたタスクに定義されたアクションが、ビルドプロセスの一部として、ビルドの実行時に呼び出されることになる。