Gradle のtask定義
doFirstとdoLastの違いについて
TaskのleftShiftはもう使えない。
task hello << {
println "hello"
}
この書きたかはGradle3くらいから警告の出るものになった。
代わりにこのようにして書く。
task hello {
doLast {
println "hello"
}
}
で、いまいちこのdoLastって何かよくわかっていなかったが、
タスク実行時の後処理を書けるってことなのか!
と、やっと理解できました。
まぁ、doLastだからそのままなんやけど…。
task hello {
println "hello"
}
こう書くのと何が違うのかが、理解できてなかったんだよね。
処理実行のタイミング
task hello {
println "タスクインスタンス化で処理される"
doFirst { println "タスク実行の前に処理される" }
doLast { println "タスク実行の後に処理される" }
}
上記の通り、それぞれ実行されるタイミングが違います。
$ ./gradlew hello
タスクインスタンス化で処理される
:hello
タスク実行の前に処理される
タスク実行の後に処理される
タスクのインスタンス化時というのは、
build.gradleが読み込まれたタイミングなので、
./gradlew hello
としなくても、./gradlew task
とかした場合にでも実行されるところになります。
doFirstでタスク実行前のチェック
タスクのdoFirstを使えば、
タスク実行前に必要なパラメータのチェックを挟む事ができます。
task exec(type: JavaExec) {
classpath = sourceSets.main.runtimeClasspath
workingDir = new File(".").absolutePath
systemProperties = System.properties
doFirst {
if (!project.hasProperty("main")) {
throw new IllegalArgumentException("""
|usage:
| ./gradlew exec -Pmain=<ClassName>
|""".stripMargin())
}
main = project.main
}
}
実行するMainクラスを指定して、実行してくれるタスクです。
Mainクラスが指定されていないと、usageを出力してタスクとしては失敗するということができますね。
おしまい
最近ブログが更新できていなかったので そろそろちゃんとしよう。
今年も一年あっという間で、 春頃は2、3日に1記事目標で頑張ってたんですが、流石にきつかった…。
段々意識が薄れて書かなくなっちゃうので、気を付けます。
1件のコメント