私は、GradleプラグインとGradleタスクの違いがわからなかった。
Gradle素人として、いくつか疑問が浮かんできた。
「プラグインとタスクの本質的な違いはなんだろう?」
「GradleプラグインとGradleタスクの使う場面ってどこだろう?」
まずは、Gradleプラグインについて調べてみた。
Gradleプラグインは、新しい既存の機能を拡張するために存在している。
そして、Gradleプラグインを使うことで新しいタスクの追加や、既存の設定を上書きしたりすることができるようだ。
ここで出てきたタスクという単語。
そう、Gradleタスクはプラグインによって追加することができるのだ。
もちろん、プラグインをわざわざ作成しなくても、直接build.gradleに定義することも可能。
そして、ここでいうタスクとは、Gradleのビルドにおける1つの作業単位を表す。この作業単位とは、実際にはクラスのコンパイルや、JARの作成、そしてJavaDocの作成などのひとまとまりのロジックを意味している。
そしてこのタスクは、別のタスクに依存することができる。なのでタスクを連結させて複雑なビルドの内容を表現することができるようだ。
つまり、Gradleプラグインは、Gradleタスクと上書きされた設定オプションを提供するためのものであり、Gradleタスクは、そのビルドにおける1つの作業単位をあらわす。
ドキュメントなどを読んでいると、直接build.gradle.ktsにDefaultTask
を継承した抽象クラスを作成して、tasks.register()
を呼び出すことでタスクを追加しているのを確認することができる。
しかし、これはPlugin<Project>
を継承したプラグインクラスでオーバーライドされるapply()
に第一引数として渡されるProject
変数のtasks
プロパティを使っても同じようにタスクを登録することができる。
そういう意味で、プラグインは上書きされた設定オプションのみならず、タスクも提供することができるのだ。
参考文献