gradle使ってみる (2) - タスク定義な小メモ -
ひとまずちょいとGroovyな勉強が必要だったので間が開いちゃいましたが進めてみる。ちなみにこのgradle使ってみるに関しては基本的に公式ドキュメント(と思われる)のを見てやってるのでそっち見た方が良いかと
前の続き的な感じでGradleのタスク定義なちょっとしたメモ的なのを
タスクをスキップする
色々方法がある模様で
task test << {
println "test"
}
test.onlyIf {
project.hasProperty("ok")
}
上記の場合onlyIfに指定されているクロージャ部分がtrueを返さない限りはタスクはスキップされる模様。なので
# スキップされる
gradle test
# 実行される
gradle test -Pok
な感じ。で2つ目の方法として、gradleのタスクにはenabledっていうプロパティが存在する、デフォルトではtrueになっているけどこれをfalseにするとタスクはスキップされる模様
task test << {
println "test"
}
test.enabled = false
という感じになる。この場合testタスクを実行してもスキップされる。一定の理由でタスクを実行させる場合にはenabledを切り替えて実行させるようにすれば良い模様
task test << {
println "test"
}
task test2 << {
println "test2"
test.enabled = true
tasks.test.execute()
}
test.enabled = false
でさらに、StopExecutionExceptionをスローする事で以降のタスクが実行されなくなる。但し、あくまでタスク単位な話っぽい
task test << {
println "test"
}
task test2(dependsOn: test) << {
println "test2"
}
test.doFirst {
if (!project.hasProperty("ok")) {
throw new StopExecutionException()
}
}
こうするとtest2タスクを実行するとtestタスクを依存性としているので実行されるが-Pokしない限りはStopExecutionExceptionがスローされる。でこれはdoFirstでスローしているけど、あくまでtestタスク内でのみ限る模様。test2タスクは普通に実行される。ちょっとtest2のタスクまで止める方法は判明してない...orz
とりあえずはタスクをスキップする方法はこんな感じの方法がある模様
タスクのパターンマッチ
task.addRule使えば出来る模様
tasks.addRule("Pattern: test<ID>") { name ->
if (name.startsWith("test")) {
task(name) << {
println "task: " + (name - "test")
}
}
}
例えば
# 出力は「task: 123」
gradle test123
になる。という感じとかで使える模様