今日はこのドキュメントを参考に手を動かしてみる。
[Baseプラグイン]
Baseプラグインは最も基本的なタスクやルールを提供してくれる。
利用するには、以下の記述をbuild.gradle.ktsに追加する。
plugins {
base
}
中でも、Baseプラグインが提供するライフライクルタスクが最も重要らしい。
ライフライクルタスクについては、こちらのドキュメントに説明がある。
ライフサイクルタスク自身は何も処理をしないが、複数のタスクをまとめてくれるらしい。
Base pluginが提供するライフサイクルタスクはassemble、check、buildの3つがある。JavaやKotlinのGradleプラグインもこのBaseプラグインを利用しているため、基本的にはBaseプラグインを単体で利用する必要はなく、各言語のGradleプラグインを利用すればよさそうだ。
[ライフサイクルタスクにタスクを追加する]
プラグインの開発者やビルドの管理者は、check.dependsOn(task)のようにライフサイクルタスクに独自のタスクを追加できるらしいので、実際にやってみる。
以下のようなbuild.gradle.ktsファイルを用意する。
plugins {
base
}
val taskX by tasks.registering {
doLast {
println("taskX")
}
}
check.dependsOn(taskX)
gradle -q checkを実行すると、以下のようにエラーになってしまった。
* What went wrong:
Script compilation error:
Line 10: check.dependsOn(taskX)
^ Unresolved reference. None of the following candidates is applicable because of receiver type mismatch:
public val TaskContainer.check: TaskProvider<DefaultTask> defined in org.gradle.kotlin.dsl
1 error
直接checkタスクを呼び出せるわけではないらしい。
自分で定義したタスクにアクセスする場合は、tasks.named("myTask")のようにアクセスする必要があるが、Gradleプラグインによって定義されたタスクの場合は、tasks.pluginTaskのようにアクセスすることができる(参考:Locating tasks)。
しかし、tasks.check.dependsOn(taskX)のように修正したところ、実行時に以下のエラーとなった。
* What went wrong:
Script compilation error:
Line 10: tasks.check.dependsOn(taskX)
^ Unresolved reference: dependsOn
仕方ないので、やや冗長になるが以下のように修正した。
tasks.check {
dependsOn(taskX)
}
これで、checkタスクを実行すると以下のように出力された。
$ gradle -q check taskX
無事、taskXをcheckタスクの依存関係に追加し、ライフサイクルタスクの実行時に独自のタスクを実行することができた。