Mavenはビルドに適したツールか?

今年の2月くらいの記事みたいなので、ひょっとしたらもう読んだ人も多いかもしれませんが、

こんな記事があったのですね。知りませんでした。要約すると、

  • 大半の人は、Mavenというアイデア自体は素晴らしいと思っている。
  • しかし、Mavenの実装に関しては、「素晴らしい」「既存のビルドツールよりはましだ」「複雑過ぎて使いこなせない」と議論が分かれている。

といったところのような気がします。「Mavenは言ってみればEJB2のように無駄に複雑過ぎるので覚える気にも使う気にもなれない」的な意見は、なかなか的を射ているような気がします。

また、IDEとの相性で言うと、

  • NetBeans>>>>>(越えられない壁)>>>>>>>IDEA>Eclipse

みたいで、私が「NetBeansMavenプラグインEclipseに比べてよくできてるかも」と思っていたのは、あながち間違いでは無いみたいです。

それはさておき。かくいう私はというと、

  • プロジェクトのひな形の作成
  • 依存性の推移的な解決

この辺りの機能は便利かなーと思うのですが、

  • 痒いところに手が届かないというか、ビルドプロセスをカスタマイズしようと思うとちょっとめんどくさいというかシンプルじゃない
  • Eclipseの特にWTPと相性が悪い
    • mavenがクラスパスに依存ライブラリを追加しても認識しない(WEB-INF/libの下のjarしかデプロイしない)とか
    • Eclipse3.2の頃の話なので、ひょっとしたら3.3とか3.4とかで修正されてるかもしれませんけど
  • djUnitとかみたく、antタスクしか提供していなさそうなライブラリもときにはある

このあたりがめんどくさかったので、以前の日記に書いた通り、ベースはantで、部分的にmavenのコマンドをantタスクに組み込んで利用しているという形を取ることが多い訳なのですが。

早い話が、

  • イデア自体は素晴らしい
  • でも、痒いところには手が届かない
  • でも、便利な機能もたくさんある
  • なので、便利なところはうまく取り入れて使いたい

なんていう、まぁありきたりの感想な訳なのですが。よぉーくくだんの記事を眺めてみると、

  • 依存性管理システムの代用品としてIvyを推奨

って書いてあるじゃありませんか。


Ivy・・・?


なんでしょう。寡聞にして聞き覚えがありませんので、ぐぐってみました。

これのことでしょうか。

  • Ivyは、柔軟性とシンプルさを重視した、ポピュラーな依存性管理システムです。

とかゆってますね。自ら「ポピュラー」とかいうのはどうだろうとも思う*1のですがまぁそれはおいといて。基本的には、こんな感じっぽいです。

  • 柔軟性とシンプルさを重視している。
  • スタンドアロンなツールとして利用することも可能だが、antと統合することにより、より良く動作するよう設計されている。
  • 依存性を解決するためのリポジトリとして、以下の三つのリポジトリを想定している
  • 使い方はこんな感じ。
    • こんな感じのIvyの設定ファイル(ivy.xml)を書いて、
<ivy-module version="2.0">
    <info organisation="apache" module="hello-ivy"/>
    <dependencies>
        <dependency org="commons-lang" name="commons-lang" rev="2.0"/>
        <dependency org="commons-cli" name="commons-cli" rev="1.0"/>
    </dependencies>
</ivy-module>
    • こんな感じのantのbuild.xmlを書く。
<project xmlns:ivy="antlib:org.apache.ivy.ant" name="hello-ivy" default="run">
    
    ...
    
    <!-- ================================= 
          target: resolve              
         ================================= -->
    <target name="resolve" description="--> retrieve dependencies with ivy">
        <ivy:retrieve />
    </target>
</project>


ほっほー。


元々、mavenで一番便利だなーと思ってたのは依存性の解決だし、今現在私はそれをantタスクを通して実行しているので(Eclipseの場合ですが)、ひょっとしたらこれは結構いけるかも?この辺もうまくいけるようならmavenから乗り換えてみてもいいかも。

  • 推移的な依存性の解決
  • 基本はmavenリポジトリからライブラリを取得、mavenに登録されていないライブラリ(djUnitとか、Struts-Layoutとか)はローカルまたは共有から取得


そんな訳でちょっと試してきます。

*1: 結構、あちらの方は自ら「ベリーセキュア」とか平気で名乗りますよね。