Javaプロジェクトにおけるビルドツール2
前のエントリの続き。今回はどのような場面にどのツールがマッチするかを、自分なりの考えをふまえて紹介します。
ちなみに、それぞれのツールの使用経験はこんな感じ。
ビルドツール | 使用経験 |
---|---|
Ant | 中〜大規模プロジェクトを1件 |
Maven | 小〜中規模プロジェクトを複数件 |
Gradle | 趣味のサンプルコードで複数件 |
SBT/Scalaは使ったことがないので除外。想像ですが、SBTをJavaプロジェクトで使うとなると、Gradle的な立ち位置になるかと思ってます*1。
ソースコードにJava以外も扱いたい場合
プロダクトコードには入れず、テストコードだけでGroovyを扱いたい場合も含みます。要するに、Java以外にコンパイルしたいソースコードがあるかどうか。
このケースでは、おとなしくGroovyを標準サポートしているGradleを使ったほうがいいかと思います。
Mavenでgroovyを扱えるようにする、GMavenというMavenプラグインもあるにはあります。ただ、メンテがあまりされていませんし、使ってみた感じちょっと挙動が怪しいなというところがちらほら。Groovy 1.8対応もJIRA上には上がっているのですが、まだ本家には取り込まれてません。
(Mavenでサポートされていない)カスタム処理が入らない場合
ビルドプロセスがMaven(プラグイン含む)で解決できる範囲であまりカスタム処理が入らないならば、ビルドスクリプトの作成しやすさは以下のような感じになるかと思います。
Maven > Gradle >> Ant
やっぱりMavenのプラグインの豊富さは魅力的で、うまくはまればカスタムなコードを書かずにやりたいことが実現できます。Webや書籍の情報・ノウハウに関しても、まだGradleに比べてAnt/Mavenの方が豊富ですし。
ちなみに、Mavenプラグインで感動したのはMaven Release Pluginですね*2。これぞ自動化!といえるプラグインではないでしょうか。release pluginに関しては、ちょっと古い記事ですがこれも参考にしてみてください。
(Mavenでサポートされていない)カスタム処理が入る場合
ただし、Mavenはプラグインを使っても解決できない or Mavenプラグインがそもそも提供されていないようなカスタム処理を組み込もうとすると、途端に難易度があがります。
Gradle > Ant >> Maven
Maven AntRun PluginでAntタスクを使ってカスタム処理を実現する方法などもあるにはありますが、多用するとメンテナンス性に欠けるので、個人的にはあまり好みじゃないです。かといって、そのような処理を記述するたびにMavenプラグインを自作するのも、ちょっと敷居が高いでしょう。
Antでは、Mavenのようなデフォルト構成が規定されておらず、従わなければならない構成・制約がない分だけカスタムな処理を記述しやすくはあります。ただ、前回も触れたように、そもそもXMLではIF文やFor文といった単純な制御構造を記述するのさえ一苦労です。Ant-Contribを使えば実装は少し楽できますが、メンテナンス性に乏しいのは変わらずです。
カスタム処理が(無視できないくらいに)入るなら、Gradleが第一候補になるでしょう。GradleはGroovyベースなので、IF・For文といった処理も容易に記述することができます。