kaakaa Blog

この世は極楽 空にはとんぼ

指定時刻内のみで動作するタスク

最近、セールで買ったコイツを読み進めてる。

Gradle Effective Implementation Guide

Gradle Effective Implementation Guide


その中で、面白そうなコードがあったので紹介。

build.gradle

def printTaskName = { task ->
        println "Running ${task.name}"
}

task first << printTaskName

first.doFirst{
        def today = Calendar.instance
        def workingHours = today[Calendar.HOUR_OF_DAY] in 8..17

        if(workingHours) {
                throw new StopExecutionException()
        }
}

task second(dependsOn: 'first') << printTaskName


こいつを

gradle second

で実行すると、実行した時の時刻が8〜17時の間であれば、firstタスクが実行中にStopExecutionExceptionがthrowされて、firstタスクの実行が中止される。(secondタスクは実行される)


マシンリソースを食うタスクを業務時間中に実行せず、ナイトリービルドの際だけに実行されるようにしたい時とかに使えそう。


StopExecutionExceptionを投げる以外にもタスクを実行しないようにする方法は色々あるみたい。

  • StopExecutionExceptionを投げる
  • taskが持っているonlyIfメソッドを使う
  • gradleコマンドの-xオプションで実行したくないタスクを指定する
  • taskのinputs/outputsプロパティを指定し、inputs/outputsプロパティに指定されたファイル群に更新が無い場合にタスクをスキップする
  • taskの持つenabledプロパティをfalseにする


ありすぎだろ。


Gradle面白そうだから実際のプロジェクトでも使ってみたいな〜