gradle2.4以来、gradleのRule Based Model configurationに魅力を感じて、いろいろ試しています。
日本人、破壊的な変更が入らない限り勉強しないので、今のところrule based model configurationを追っかけている人って僕の観察範囲では僕しかいません。しかし、この機能はGradle3.0の基本部分になってくるので、ぜひとも抑えてもらいたいものです。
ベタープラクティス(小出しというか、これしか今のところない…(´・ω・`))
幾つか作ってみた感触ですが、実装時のベタープラクティスとして、
@Managed
モデルオブジェクトのvalidationは@Mutate
フェーズではなく、@Mutate
フェーズで生成するtaskのactionで実行するほうがよい
まあ、ベタープラクティスといってもこれだけです。
というのはtasks.create(TASK_NAME) {}
の前の段階でvalidationして、不適切な値の場合に例外を投げるような作りにしておくと、gradleプロジェクトスクリプトのコンパイル時に必ずビルドがコケます。特にプラグインを適用して、まだmodel
の値を設定していない場合などでvalidationエラーが発生する場合は、どのタスクを実行してもBUILD FAILEDになります。したがって、validationに関してはなるべく遅延して実行されることが望ましいです。
よくない作り
@Mutate static void createTask(ModelMap<Task> tasks, ModelObject model) { if (validate(model) == false) { throw new IllegalArgumentException("model is not well defined"); } tasks.create(TASK_NAME) { // some configuration } }
上記のような実装はgradle model
タスクを実行した時にmodel
の設定をしていない場合にBUILD FAILEDになります。
ベターな作り方
@Mutate static void createTask(ModelMap<Task> tasks, ModelObject model) { tasks.create(TASK_NAME) { // some configuration doLast { if (validate(model) == false) { throw new IllegalArgumentException("model is not well defined"); } // some task action } } }
これなら、ModelObject
に対するvalidationが遅延して実行されるので、他のタスクへの影響はありません。
おわり