マルチモジュール・プロジェクトの作り方

引っ越しの荷物を片付けていたら、以前日記に残しておこうとして書いていないメモを見つけたので書いておく。前の現場の話なので多分4月頃の話。

// ----- ここから -----

今の現場のプロジェクトでは、WebアプリケーションのJavaクラスをWEB-INF/classes配下ではなく、jarファイルにしてWEB-INF/lib配下に配置するというルールがある。セキュリティ上の問題でパッケージ構成が云々というのが理由だった気がするけど、詳しくは覚えてない。
取り敢えず自分のチームはAntでビルドをしているので問題ないが、隣のチームがMavenを最近使い始めたのでどうやって対処しているのかを聞いてみたら、MavenからAntを呼び出しているらしい。(改めて聞いてみたら面倒だから違う方法にしたらしい)せっかくMavenを使っているのに勿体ないなぁと思ったので、Mavenのマルチモジュール・プロジェクトを利用しての対処方法をメモ。当然作成したプロジェクトをEclipseからも参照したいのでその方法についても。ただしこの方法を実施する場合、m2eclipseプラグインが必要になる。

以下、コマンドプロンプトでの実行を想定。

親プロジェクトの作成

mvn archetype:create -DarchetypeArtifactId=maven-archetype-site-simple -DartifactId=multi-parent -DgroupId=com.example

子プロジェクトの作成(jarプロジェクト)

前提として、親プロジェクトディレクトリに移動していること。

mvn archetype:create -DartifactId=child-core -DgroupId=com.example

子プロジェクトの作成(warプロジェクト)

mvn archetype:create -DarchetypeArtifactId=maven-archetype-webapp -DartifactId=child-web -DgroupId=com.example

Eclipseへのインポート

  1. 「File」->「Import...」->「General」->「Maven Project」
  2. RootDirectoryに親プロジェクトディレクトリを指定する。
    1. 上記の場合だと「multi-parent」
  3. Advancedをクリック
  4. 「Separate projects for modules」のチェックを外す
  5. 「Finish」をクリック

pom.xmlの編集

編集対象は、$multi-parent/child-web/pom.xml

<project>
  :
  <dependencies>
    <dependency>
      <groupId>com.example</groupId>
      <artifactId>child-core</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency>
  </dependencies>
</project>

上記設定追加後にmulti-parentでmvn packageを行うと、child-core-1.0-SNAPSHOT.jarがchild-web/WEB-INF/lib配下に配置される。mvn testだとかは全体でやるのは無駄なので、child-coreで実行すれば問題ない。あとは余計なソースフォルダ等を削除すればOK。
そういえばS2StrutsのAutoStrutsConfigRegisterPluginに「無設定S2Strutsに含めるクラスをクラスパスに含まれるjarファイル内からも検索するか指定します。」というプロパティがあった。ということはそれなりに需要があるのかな。個人的にはマルチモジュール・プロジェクトを利用する場面っていうのがあんまり思い浮かばないんだけど、どういう場合に使っているのかが知りたい。

おわり。

// ----- ここまで -----

今年の更新は多分これで最後です。このブログをご覧頂いている皆様、良いお年を。