Maven2.0で遊ぶ

Maven2.0で遊んでみることにした。
本体はここ。
screenshot
http://maven.apache.org


Maven2.0はプロジェクト管理ツールだが、プロジェクト管理という言葉は抽象的でわかりにくい。本家サイトでもイタリックで難しいことを書いているが、私にとって大事なことはMavenならモジュールの依存性管理から、プロダクトのリリース管理までを統合的に管理してくれそうだということである。


Mavenをずっと「マーベン」と読んでしまっていたのだが、「メイバン」のほうが正しい発音に近いらしい。Websterによると中央から東ヨーロッパで主にユダヤ人に利用される、ヘブライ文字で書かれたドイツ語に起源があるらしい。アメリカ英語だそうだ。意味はExpertに順ずる。



確か有名なオレンジニュースで知ったのだと思うが、Maven2.0の解説本のPDFが無料で以下のサイトからダウンロードできる。
http://library.mergere.com/
ただし、登録が必要。
登録したらそんなに頻繁でもないが、広告が送られてくるようになった。
気になる人は捨てメアドで登録したほうが良いだろう。
前半と6,7章辺りまで読んだ。
この本はかなり参考になると思う。
後半でTeamでの使用ということでリポジトリの共有からContinuumの使用まで解説がある。Continuumについてはあまり深い記述はないのだが、ビルドを行ったり、フェールした時にメールを受け取ったりの設定を読むことができた。


本家のサイトからダウンロードを行い、解凍して実行してみた。
環境はWindowsXp+Cygwin
最初は失敗してしまった。
binにあるシェルスクリプトCygwinに対応している。*1私の場合、groupIdをgroupIDと記述してしまってエラーになってしまった。
Cygwin環境では.m2ディレクトリは$HOMEではなく、C:\Documents and Settings\user-nameの下に作成された。指定できるのかもしれないが、今のところ良くわからない。
また最初に気付かなかったのだが、mvnを実行する時にはpom.xmlのあるディレクトリに移動しないといけないようだ。


Googleで検索しながら遊んでいたら、素晴らしいBlogを発見した。
こちらにMaven2.0のTipsが良くまとまっている。
試験管のなかのコード

筆者の方は現在はSVN+Tracを研究されている模様。
丁度私も本屋で最新のWeb+DB Pressを読んでTracに興味を持ったところであったのでこれもうれしかった。
Tracの日本語版、trac-jaはこちらのサイトにて公開されている。
http://www.i-act.co.jp/project/products/products.html


(追記)
さて、Maven2.0は良い意味でも悪い意味でもUnixのコマンドのような感じだ。mvnの後に続くコマンド名もXMLのタグもその中に挟む値も、結構慣れないと暗記できない気がする。逆に慣れてしまえばいくらでも書けて面白いのだろう。
例に倣って実行しているととにかく良くダウンロードを行う。
これはちょっと心配になってネットを使わない方法を調べてみたら、やはり話題になっていた。
Legacy forums will be shutdown February 28
ここでの質問者と同じくネットが利用できない環境の人も多いのではないだろうか。
最近は情報漏洩が続いたおかげですっかり開発環境が悪くなって調べ物もできない環境も多いと聞く。こういうネットワークが前提のプログラムにはつらい時期かもしれない。
Continuumのほうはまだまだという感じがした。
Apacheのサイトでもまだ弱気な発言が書いてある。
Maven2.0は現時点では学習コストが比較的高く、また設定がXMLベースで手間が大きく、大きなプロジェクトで使用する場合にどうすれば良いのかがうまく見えてこない。
IDEとの連携や、Continuumの成長など、素敵な皮が作られることが望まれる。またそれらを通してのベストプラクティスが紹介されるまでは普及が難しいのではないかと感じた。
この点は最初からWebアプリとして開発されたTracのほうが好感が持てるかもしれない。

(追記2)
昨日、今日で有用な解説記事が2つも出た。
やはりMaven+Continuumが盛り上がっているのは確かだ。
1つはPOMの解説記事。
The Maven 2 POM demystified | JavaWorld
もう1つはContinuumの解説。短くて丁度良い。
http://today.java.net/pub/a/today/2006/05/30/continuous-integration-with-continuum.html

Continuous IntegrationについてはMartin Fowlerの記事が良く引用されるが、Wikipediaも、そして何よりもc2.comでの議論がとても興味深い。
http://en.wikipedia.org/wiki/Continuous_Integration
http://c2.com/cgi/wiki?ContinuousIntegration

POMがXMLでなければ良かった

POMのサンプルを見てXML嫌いな私はやっぱりちょっと落ち込んだ。
目的に対して明らかに冗長であると感じる。
多くのMaven対応ツールがPOMエディタを実装しているのは何か間違っているのではないかと思う。
XMLが冗長だから高級なXMLエディタを使うのではなく、簡単な文法の代替言語を用いて人間は記述し、機械がXMLに翻訳して使えば良いのではないか。

(追記)
XMLに関してはやはり不満が多い人が多いようだ。
今までRubyまつもとゆきひろさんの日記での記事は読んでいて、YAML等の名前は知っていた。
今日、丁度オレンジニュース経由で以下の記事を拾った。
Converting Between XML and JSON
寡聞にして今までJSONというものを知らなかった。xml.comというサイトでこのような記事が記述されることに、現在のXMLの問題が如実に表れていると思う。記事はJavaScriptによるXMLJSONの双方向変換の仕方を提案していて実に興味深い。筆者はJavaScriptにてXML->DOM-JSONの関数とJSON->XMLの関数を実装されたようだが、リンクがないというのは公開されていないのだろうか。

JSONの本家は以下のようだ。
JSON
ここからリンクされている日本語の翻訳はなんとはてな上にあった。
http://d.hatena.ne.jp/brazil/20050915/1126709945
日本語の情報があるのはやはり嬉しく、brazilさんに感謝したい。
さて、本家では以下でJSONXMLの比較を行っている。
タイトルに自信が溢れていると言えよう。
JSON: The Fat-Free Alternative to XML
以下の引用には全く同感である。

When most programmers saw XML for the first time, they were shocked at how ugly and inefficient it was.

さらに本家からリンクされている、以下のサイトのPDFは攻撃的ではあるものの記述されていることはとてもまともな見解だ。
http://xmlsucks.org/

XMLの代替についてはGoogleするといくらでも手に入るようだ。
http://www.google.com/search?q=XML+alternative

さて、Mavenが「Convention over Configuration」の標語を抱え定義ファイルの記述の少なさを誇るのであれば、もう一歩進んで定義ファイルにXML代替を採用し、記述量が少なく、シンプルで、理解しやすく、保守性の良いものにするべきではないだろうか。
Seasar2, Hibernate3/EJB3, Spring等もぜひそうなってほしい。

The Human Side of XML

I tend to get lost in Ant files. When I look up how to do something with Ant, the syntax often seems hairy and difficult. XML doesn't seem as natural to me as a traditional context free grammar. I think people sometimes use XML in places where a traditional context free grammar would be better.

*1:スクリプトを読んだ限りではMacOS Xにも対応しているようだ。