ここしばらくmaven2を触っていたんだけど
最初はPhaseとGoalの関係がよく分からなかった。
ぐぐるとなんかみんな最初は混乱するみたいね。
本家maven.apache.orgに
「A Build Phase is Made Up of Goals」
て書いてあるからPhase=Goal+Goal+Goal...なのはすぐに分かるんだけど。
んで自分なりに理解して書いた図がこれ。
単にLifecycle>Phase>Goalなだけじゃなくて
「Phase同士の順序は決まってて、Goal同士の順序は未定」
というのがミソ。
これを書いてみて気がついたんだけど
makeというのは
「依存関係を書いておけばタイムスタンプ見ながら適切な順序でやってくれる。ああこりゃ便利だ」
というツールであったのに対して
mavenは
「ユーザが指定した順番で処理。タイムスタンプはプラグインが勝手に見ろ」
というアプローチ。一瞬「makeよりシェルスクリプトに近いのか!?」なんて思った。
あるいは、makeやantが処理順序の自由度に関してデータフロー型だったのに対して
mavenはバリア同期型だとも言える。
いやー面白いねと思ったので書き残しておく。