gradleで既存タスクの共通処理を定義する
gradleでの既存タスクの共通処理を定義する方法。ここでとりあげる例はごく簡単なものだが、ときには何十行にも及ぶ場合があり、それをそのままコピーするのではなく、共通部分はまとめて定義できないものかという話。
ごく簡単な例としてCopyタスクをあげる。
方法1
task copy1(type: Copy) {
from 'some.config'
into 'tmp/1'
}
これはなんの変哲も無いものだが、仮にこのfrom部分が長大なものとして、コピー先だけをあちこに変更したタスクを作りたいとすると、
task copy1(type: Copy) {
into 'tmp/1'
}
task copy2(type: Copy) {
into 'tmp/2'
}
tasks.withType(Copy) {
from 'some.config'
}
しかしこれでは、すべてのCopyタスクがこうなってしまう。
方法2
別の方法としては以下。Copyとは異なるクラスを作成し、それを初期化する。
task copy1(type: MyCopy) {
into 'tmp/1'
}
task copy2(type: MyCopy) {
into 'tmp/2'
}
class MyCopy extends Copy {
public MyCopy() {
from 'alone.config'
}
}
ただし、タスクによっては方法2が効かない場合がある。理由は今のところ不明。