EclipseでのJava開発 with Maven2 and Bazaar
対象: Eclipse-3.5, Maven-2.2.x, Bazaar-2.0.x
JavaでSwingアプリの開発をやっています。
具体的には、Maven2で構成管理をし、Bazaarでソースコード管理をし、NetBeansでGUIを作成し、Eclipseでプログラムを書いています。開発の上で試行錯誤の末辿りついたBazaarとMaven2とEclipseの構成を紹介します。(EclipseとNetBeansの連携の話は後日また)
なお、私のBazaar使用歴は短かいです(2.0からのユーザです)。以下で紹介する構成には、誤解や誤りに基く内容が含まれている可能性がありますのでご注意ください。識者のご指導ご鞭撻を期待しつつ、エントリを上げている次第です。
この説明で使う用語
EclipseのワークスペースをBazaarの共有リポジトリとする
基本コンセプトです。Eclipse + Maven2 + Subversion との違いはここです。
Eclipseでは複数のプロジェクトを「ワークスペース」に格納し、一度に一つのワークスペースを開いて複数のプロジェクトの開発を行います。
一方、Bazaarにはプロダクトの複数のブランチを効率的に格納する「共有リポジトリ」(shared repository)というものがあり、この上で複数のブランチの開発を行います。
共有リポジトリをEclipseのワークスペースとして使ってしまい、それぞれのブランチはEclipseのプロジェクトとして使ってしまう構成にします。更にワークスペース=共有リポジトリをプロダクトごとに一つ作成します。プロダクトごとにワークスペース(共有リポジトリ)を作りますので、これらが散乱しないように、ワークスペース(共有リポジトリ)格納用ディレクトリ(以下のWORKSPACES_DIR)を作成するようにしました。
事前準備
作業手順を付記しますので、参考にしてください。
Bazaar、Eclipse、bzr-eclipseプラグイン、Maven2のインストールなどが完了した状態から説明します。
bzrにて、foo_productという共有リポジトリにdevという空のブランチを作成
コマンドラインから、
cd WORKSPACES_DIR bzr init-repo foo_product cd foo_product bzr init dev
Eclipseにて、foo_product内のプロジェクトからMaven2のリポジトリを使えるように
コマンドラインから以下のように実行します。
mvn -Declipse.workspace=<full-path-of-[foo_product]> eclipse:add-maven-repo
実行したら、Eclipseを再起動します。
Eclipseにて、ワークスペース上に新規Javaプロジェクトdevを作成
Eclipseにて、ワークスペースfoo_product内に新規Javaプロジェクトdevを作成します。Maven2用プラグインをお使いの方はそこからプロジェクトを作るなどお好みの方法で。
maven2の設定(pom.xmlの作成)
foo_product/devにpom.xmlを作成します。ここもお好みの方法でやってください。他所からコピーしてきて編集する、mvn archetype:createして作成したファイル一式をコピーしてくる、Eclipseのプラグインを使うなどがお勧めです。
Eclipseプロジェクトの構成
Maven2のpom.xmlとEclipseのdevプロジェクトの構成を一致させる処理をします。devプロジェクトフォルダ(=devブランチフォルダ)にて、コマンドラインから
mvn eclipse:eclipse -DdownloadSource=True
と実行します。実行したらEclipseにてプロジェクトdevをリフレッシュ(F5)し、新規→ソースフォルダから、src/main/javaや、src/test/javaなどを作成します。devプロジェクト内にMaven2用のディレクトリtargetが作成されていますか?
Bazaarのignoreの指定
余分なディレクトリ(binとか)があれば、削除しましょう。
bzr statusを実行するか、bzr-eclipseにて、[team]→[status]を実行してください。
% bzr status unknown: ? .project ? src ? target ? pom.xml ? .classpath
こんな感じになりましたか?
この中のtargetディレクトリは、maven2が出力するファイルが置かれる場所です。pom.xmlさえあればこの中身は再現できるので、targetはバージョン管理外にしましょう。他のファイルはバージョン管理対象にします。
bzr ignore target bzr add pom.xml .classpath .project src/main/java src/test/java [other-files-if-you-added]
開発フェーズ
Eclipseでの開発
いつもどおりやればOKです。
Eclipseでリファクタリングを行うとファイル名や場所が変動しますが、bzr-eclipseプラグインが、自動的にbzr moveしてくれます。このあたりは、Subversionのプラグインと同様です。
Windows環境での注意
WindowsのEclipseにてbzr-eclipseでコミットすると、コミットコメントに日本語が使用できない不具合があったため、commitはコマンドラインから行うなどしました。
開発が一段落したら、trunkブランチ(=trunkプロジェクト)と機能ブランチを作る
devブランチの開発が一段落したら、そこまでの内容をtrunkブランチとして切り出します。
bzr-eclipseにて[team]→[branch]でプロジェクト名に「trunk」を指定するのが簡単です。コマンドラインから実行するなら、以下のように実行し、Eclipseでtrunkというプロジェクトを作成します。
bzr branch dev trunk
Eclipseからはdevプロジェクトとtrunkプロジェクトが見え、trunkの内容はdevの最終コミットと同じ内容になりました。
trunkブランチを作ったら、以降の機能追加や修正は機能ブランチで行うようにします。X機能の開発やY機能の開発のための機能ブランチ、featureXとfeatureYを作ります。実装したい機能の数だけブランチを作りましょう。trunkブランチを作ったのと同じように、devのブランチを作成します。
featureXやfeatureYの作業が終了したらdevにpushします。このあたりの構成はBazaarのドキュメント「作業スペースを構成する」を参考にしました。
devブランチではfeatureXとfeatureYの整合性などを確認し、問題が無ければtrunkにpushします。
まとめ
以上が、私が行っているEclipseとMaven2とBazaarの組み合わせです。
Bazaarは不慣れなため使いこなせておらず、Subversionに比べて大きなメリットを発揮できているとは言いがたいですが……。
Bazaarが良さそうなので使うことにしたものの、Bazaarはリポジトリの構成が自由すぎて、どう使えば良いのかわからなくなってしまいました。その中で数ヶ月使用してみて、良さそうな構成を見つけられたので、エントリしてみました。