ソースコードの共用

今回は、Maven2の使い方の中でも、「こんな使い方はマニアだなあ」という内容です。

管理人はWebアプリを作っていて、ほとんど同じソースコードを使うアプリなんだけど、ちょっとだけ
挙動が違うアプリを作ることが結構あります。例えば、Web-A アプリにソースが10本あったとすると、
Web-BアプリはWeb-Aのソースの9本と、新規の1本を使用するといった具合です。

Maven2のプロジェクトは、ソースフォルダは1つのみ

Maven2では、残念ながらソースフォルダは、1つしか認識できません。
そこで、Web-Aのソースに、10本+1本を入れてしまいます。
Web-B のプロジェクトは、pom.xml と Web-B-servlet.xml 程度だけで、ソースフォルダは
Web-A を相対パスで参照するようにします。

そして、Web-B-servlet.xml の中で、DIの機能を使って、使用するソースコードの違いを設定します。

実例

Web-A と Web-B のプロジェクトのフォルダ構成は、下図のようになります。
Web-B には src/main/java フォルダがありません。

Web-B の pom.xmlは、以下のように書きます。
ポイントは、<sourceDirectory>の部分です。ここで、相対パスでWeb-Aのソースフォルダを指定します。

あとは、Web-B-servlet.xml 内で、DIの機能を使って、使いたいソースを指定してやれば、
Web-A と使うソースコードはほとんど同じだけど、一部だけ挙動が違うWeb-B をビルドすることができます。

一括ビルドでwarの配置場所をまとめる

最後に小技ですが、Web-A と Web-B のpom.xmlに下記に記述を加えて、ビルド結果の war ファイルを
targetフォルダではなく、カレントフォルダに出力するように指定します。

その上で、左のメニューの「一括ビルド」で紹介した手法で、全体フォルダのpom.xmlから
ビルドすると、全体フォルダに Web-A.war と Web-B.war が出力されるので、成果物を一気に
取得できて便利です。