2015/07/8にGradle Version 2.5がリリースされました。
今回のリリースではいくつかの新機能が追加されているようなので、さっそく試してみます。
本記事ではContinuous buildについてです。
Continuous build
この機能はファイルの変更を監視してタスクの再実行をしてくれるというもので、RubyのGuardのようなものです。
内部的にはWatchServiceというAPIを使用しているようです。そのため、Java 7以降の環境でないとこの機能を使うことができません。
また、ビルドスクリプトの変更にも対応していないという制限もあります。
実行方法
Continuous buildを実行したい場合、-t
または--continuous
オプションを付けます。
オプションを付けて実行すると、指定したタスクが一度実行され、その後変更監視状態になります。
終了したい場合には最後のメッセージにあるようにctrl-dで抜けることができます。
$ gradle -t build
Continuous build is an incubating feature.
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:jar UP-TO-DATE
:assemble UP-TO-DATE
:compileTestJava UP-TO-DATE
:processTestResources UP-TO-DATE
:testClasses UP-TO-DATE
:test UP-TO-DATE
:check UP-TO-DATE
:build UP-TO-DATE
BUILD SUCCESSFUL
Total time: 4.213 secs
Waiting for changes to input files of tasks... (ctrl-d then enter to exit)
その後監視対象のファイルに変更があった場合には以下のようにタスクが再実行されます。
Change detected, executing build...
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:jar UP-TO-DATE
:assemble UP-TO-DATE
:compileTestJava
:processTestResources UP-TO-DATE
:testClasses
:test
:check
:build
BUILD SUCCESSFUL
Total time: 1.925 secs
Waiting for changes to input files of tasks... (ctrl-d then enter to exit)
再実行の条件
再実行の条件は各タスクで指定されている入力ファイルとタスクの依存関係によって決まっています。
各タスクで指定されている入力ファイルというのは、タスク定義のinputsプロパティで指定されたものを指します。
そのため、独自に定義したタスクでもContinuous buildを使いたい場合にはinputsプロパティを適切に指定する必要があります。
さらにタスクの依存関係によって、指定したタスクが依存しているタスクの入力ファイルも監視対象になります。
例えば典型的なJavaのプロジェクトの場合、build
タスクを指定しているとmainとtestに含まれるファイルの変更によって再実行されますが、
compileJava
タスクを指定している場合には、src/main/java
以下のファイルの変更のみによって再実行され、src/main/resources
やsrc/test/java
以下のファイルの変更では再実行されません。
今後
今回リリースされた機能はあくまでも初期リリースだと言っており、今後のリリースでさらなる機能拡張がされるようです。