しおしお

IntelliJ IDEAのことなんかを書いてます

GradleのFinalizer tasksを試す

Finalizer tasksを使うと、タスク終了時に指定したタスクを実行出来るようになる。

この例の場合、hoge1タスクが終了するとhoge2タスクが実行されます。

task hoge1 << {
  println 'hoge1'
}

task hoge2 << {
  println 'hoge2'
}

hoge1.finalizedBy hoge2
  • 実行結果
:hoge1
hoge1
:hoge2
hoge2

BUILD SUCCESSFUL

タスクが失敗した場合の動作

Finalizer tasksは、必ず実行されるので下の例のように例外がタスクがfailした場合でも実行されます。

task hoge1 << { 
  println 'hoge1' 
  throw new RuntimeException('異常終了') 
}

task hoge2 << {
  println 'hoge2'
}

hoge1.finalizedBy hoge2
  • 実行結果
:hoge1
hoge1
:hoge1 FAILED
:hoge2
hoge2

FAILURE: Build failed with an exception.

複数のタスクを実行したい場合

複数のタスクを指定した順に実行させたい場合には、finalizedByを複数定義する。

例えば、以下のように定義した場合、hoge3>hoge2の順にタスクが実行されることは保証出来ません。(順序を保証しないのであればこれで問題はありません。)

hoge1.finalizedBy hoge3, hoge2

以下のようにfinalizedByを複数定義してあげましょう。

hoge1.finalizedBy hoge3
hoge3.finalizedBy hoge2

これで、hoge1の後にhoge3>hoge2の順にタスクが実行されます。

:hoge1
hoge1
:hoge1 FAILED
:hoge3
hoge3
:hoge2
hoge2

おわり。