mavenマルチモジュールプロジェクトの構成例

システム開発でよく使用するmavenマルチモジュールプロジェクトの構成サンプルを説明します。

構成方針

  • 複数のサブシステムをもつシステム開発を想定しています。システム名はzzz、サブシステムはf10, f20等のサブシステムIDが割り当てられているものとして、各種のネーミングを決定しています。
  • このシステムでは、DB操作にはmybatisを使用する想定です。各テーブルに対する基本操作を行うためのmybatis用のクラス群を作成するためにmybatis-generatorを使用します。システム固有の要件・仕様を満たせるよう、既知や独自プラグインを使ってmybatis-generatorの出力をカスタマイズします。
  • 開発環境としてEclipse Java EE IDE for Web Developers(Photon 4.8.0), Java8, mybatis-generator-maven-plugin 1.4.0を使用します。参照先DBはmariadb 5.5.64(JDBCドライバはmariadb-java-client 2.5.2)を使用します。
  • サンプルのコードはGitHubに公開しています。
    ※現状、maven, mybatis, mybatis-generatorの検証が目的のため、web/batchのサンプルは実質空になっています。
    GitHub

    Contribute to nextdoorwith/example-maven-mybatis development…

モジュール構成

プロジェクトのモジュール構成は次の通りです。
zzzシステム全体で共通するものはzzz-common-*というプロジェクト群、サブシステム固有のものは例えばf10の場合はzzz-f10-*というプロジェクト群で構成しています。
システム全体、サブシステム内で共通のプロパティや依存関係を定義するために、zzz-parent, zzz-f10-parent等の親プロジェクトを設けています。

zzz-common-*ではシステム共通のクラス群を格納します。システム全体で共通に使用するクラスやリソース群をzzz-commonに格納しています。mybatis-generator関連のクラスやプロパティ等はzzz-common-mbgに格納します。
各サブシステムの場合、Webアプリとバッチプロジェクト、これらで共通のクラス群を格納するプロジェクトを想定しています。例えば、f10サブシステムの場合、それぞれzzz-f10-web, zzz-f10-batch, zzz-f10-commonとなります。

プロジェクト依存関係

プロジェクトの依存関係は次の通りです。

zzz-common-mbgは依存関係を持つプロジェクト/ライブラリというよりは、システム共通のツールの位置づけのプロジェクトになっています。mybatis-generatorの設定ファイルを切り替えて実行することで、各サブシステム用のmybatis関連クラス・ファイルを生成し、各サブシステムのcommonプロジェクトに出力します。
JAX-RS等を使ったシステム間のデータ連携を行う場合、呼び出し側での実装を容易にするために、公開APIで使用しているEntity/DTOを使用したい場合がある。このような状況を考慮するなら、zzz-f10-domain等のEntity/DTOを格納するプロジェクトを用意することも考えられる。

データベース環境

サンプルではmariadb 5.5(CentOS7)を使用しています。
各サブシステム毎にデータベースを持っている想定であり、サブシステムf10用のデータベースとして、次の手順で構築しています。

関連リソース

このサンプルプロジェクトに関わるリソースは次の通りです。

  • システム開発でのmybatis-generatorの利用
    実際のシステム開発でmybatis-generatorを使用するためのpom.xml, generatorConfig.xmlのサンプルを説明します。mybatis-generatorの既存機能やプラグインで業務要件を満たせない場合があるため、独自プラグインを作成する前提の構成となっています。