たぷつきません

おなかがでてきた。もうたぷついてるやん。

mavenでビルドするプロジェクトごとにローカルリポジトリを変更したい

機能の追加や要望やバグフィックスが目白押しな毎日なのですが、課題がわんさかあると、みんなで並行して課題ごとのブランチがあったり、一人でも日々変わる優先順位の切り替えで平行作業が余儀なくされます。
チームで開発した依存ライブラリも沢山あってしかもそれらにも課題ごとにブランチされていて、よーするに人不足で一つに集中できないんですが、そんな状況ではもうローカルインストールした個々のmvn projectのSNAPSHOTがどのfeatureもしくはhotifx用に入れたものかとか把握しきれなくなります。
CIでnexusにorigin/developで自動的に上がったのが落ちてきて混ざるとまた大変だし(※mvn オプションで切っとけるけどやっぱり常に意識は必要)
gitはバンバン作業ブランチ切り替えられて最高ですが、各課題を並行作業できるように、eclipseワークスペースを開発機能ごとhotfixごとに分けて、同じprojectであろうと、それぞれのワークスペースにgit cloneして開発しています。
大きな機能の開発中の未コミット状態からでも、突発的に起きた問題の調査しなければならない要求にもすぐ答えられます。便利。
その延長で、だったらワークスペース毎に .m2/repositoriy 置いたら良いじゃない!! という結論が出ました。
ユーザーディレクトリ直下の .m2 以外に、ワークスペースのディレクトリ内に .m2/repository置いといてそれを使うようにすればさー!!って。
でも手動で切り替えとかだと、絶対ウッカリ切り替え忘れが起きて別のローカルリポジトリに入れちゃったりして結局わやくちゃになることが、やる前から容易に想像つきます。にんげんだもの。

そんなわけで、プロジェクトごとにローカルリポジトリを切り替えられることができるようにしたmvn · GitHub 作成。
mvn 実行したそのディレクトリの属するm2 repositoryを自動的に扱ってくれます。

使うための準備
  • それぞれのワークスペースに .m2/repository ディレクトリを作っておきます。(※最初は ~/.m2/repository を copy -rf してきても良いですね。ダウンロード時間とローカル全コピー時間のトレードオフで判断してくださいな)
  • mvn本体を直接起動せずにリポジトリ切り替えしてから起動するシェルとして同名のmvnコマンドを置きます。
    • ↑のシェルを /usr/local/binより先にPATHが通ったところに置いて、chmod +x しといてください。
    • ちなみに私は、雑に ~/bin を作って mvn という名前で配置し、.bashrcの最後に、export PATH=~/bin:$PATH を記述しました。
    • 違う場所にmvnがあるなら、シェルの最後の行の /usr/local/bin/mvn を正しい物に変えてください。
使い方
  • 今までと何も変わりません。
    • ビルドするプロジェクトの親ディレクトリ階層のどこにも .m2/repositoryが見つからなければ、今までどおり ~/.m2/repository が使われます。

おわり