8.5. Mavenアーキタイプの構成

本章では、Nablarchの提供するMavenアーキタイプの構成と、各ディレクトリ・ファイルの概要を記載する。

8.5.1. 全体構成の概要

Nablarchでは、以下のアーキタイプを提供している。なお、アーキタイプのグループIDはすべて com.nablarch.archetype である。

アーティファクトID 説明
nablarch-web-archetype ウェブアプリケーション実行制御基盤を使用する場合のアーキタイプ
nablarch-jaxrs-archetype RESTfulウェブサービス実行制御基盤を使用する場合のアーキタイプ
nablarch-batch-ee-archetype JSR352に準拠したバッチアプリケーションフレームワークを使用する場合のアーキタイプ
nablarch-batch-archetype Nablarch独自のバッチアプリケーション実行制御基盤を使用する場合のアーキタイプ
nablarch-batch-dbless-archetype Nablarch独自のバッチアプリケーション実行制御基盤を使用するがDBに接続しない場合のアーキタイプ
nablarch-container-web-archetype nablarch-web-archetype のDockerコンテナ版アーキタイプ
nablarch-container-jaxrs-archetype nablarch-jaxrs-archetype のDockerコンテナ版アーキタイプ
nablarch-container-batch-archetype nablarch-batch-archetype のDockerコンテナ版アーキタイプ

nablarch-web-archetypeとnablarch-batch-archetypeのアーキタイプを使用し、 プロジェクト生成中に入力する artifactId に、 pj-web , pj-batch をそれぞれ指定した場合、以下のような構成となる。

../../../../_images/maven_archetype.png
Mavenプロジェクト名 パッケージング 用途
pj-web war

ウェブアプリケーション実行制御基盤を使用するアプリケーションを開発する。

最終的に、warファイルとしてアプリケーションサーバにデプロイされる単位で作成する。

pj-batch jar Nablarch独自のバッチアプリケーション実行制御基盤を使用するアプリケーションを開発する。

補足

自動生成エンティティは gsp-dba-maven-plugin(外部サイト) を使用した場合に生成される。 使用する場合は、gsp-dba-maven-plugin(DBA作業支援ツール)の初期設定方法 に記載されている設定を行う必要がある。

8.5.2. 各構成要素の詳細

上記 pj-webpj-batch と同様に、下表の通りにプロジェクトを作成したものとして各構成要素についての詳細を記載する。

Mavenプロジェクト名 生成元のMaven archetype
pj-jaxrs nablarch-jaxrs-archetype
pj-batch-dbless nablarch-batch-dbless-archetype
pj-batch-ee nablarch-batch-ee-archetype
pj-container-web nablarch-container-web-archetype
pj-container-jaxrs nablarch-container-jaxrs-archetype
pj-container-batch nablarch-container-batch-archetype

8.5.2.1. nablarch-archetype-parent(親プロジェクト)

8.5.2.1.1. 概要

nablarch-archetype-parentは、各アーキタイプから作成したプロジェクトの親となるプロジェクトである。

このプロジェクトを利用者が直接書き換えることは無い。

本プロジェクトには、主に以下の設定が記述されている。

  • 各種Mavenプラグインのバージョン
  • 各種ツールが使用するファイルのパス

8.5.2.1.2. nablarch-archetype-parentの所在

アーキタイプから生成したプロジェクトを一度でもビルドしたことがあれば、以下の階層下にnablarch-archetype-parentのpom.xmlがキャッシュされている。 nablarch-archetype-parentに記載された設定を確認したい場合は、キャッシュされたpom.xmlを確認すると良い。

<ホームディレクトリ>/.m2/repository/com/nablarch/archetype/

8.5.2.2. pj-webプロジェクト

ウェブアプリケーションのwarファイルとしてパッケージングされるプロジェクト。

8.5.2.2.1. プロジェクトの構成

myapp-web
|
|   pom.xml                     … Mavenの設定ファイル
|   README.md                   … 本プロジェクトの補足説明(読み終わったら削除可)
|
+---db                          … 疎通アプリケーション用のDDL及びInsert文。RDBMS別に格納されている。
|
+---h2
|   +---bin                     … H2の起動に使用するファイルが格納されている。
|   |
|   \---db
|           SAMPLE.mv.db        … H2のデータファイル。
|           SAMPLE.mv.db.org    … H2のデータファイルのバックアップ。H2が起動しなくなった場合に「SAMPLE.mv.db」にコピーして使用する。
|
+---src
|   +---env                     … 環境別の設定ファイルが格納されている。
|   |
|   +---main
|   |   +---java                … 疎通確認用アプリケーションのクラスが格納されている。
|   |   |
|   |   +---resources           … 直下には開発環境・本番環境で共に使用する設定ファイルが格納されている。
|   |   |   |
|   |   |   +---entity          … ER図のサンプル。gsp-dba-maven-pluginを使用する際のサンプルデータとして用意している。
|   |   |   |
|   |   |   \---net             … ルーティングアダプタ用設定ファイルが格納されている。
|   |   |
|   |   \---webapp
|   |       +---images          … 疎通確認用の画像ファイルが格納されている。
|   |       |
|   |       \---WEB-INF         … web.xmlが格納されている。
|   |            |
|   |            +---errorPages … エラー画面のサンプルが格納されている。
|   |            |
|   |            \---test       … 疎通確認画面用のファイルが格納されている。
|   |
|   \---test
|       +---java                … 疎通テスト用のユニットテストが格納されている。
|       |
|       \---resources           … 直下にはユニットテスト用の設定ファイルが格納されている。
|           |
|           +---data            … gsp-dba-maven-pluginを使用する際のサンプルデータとして用意している。
|           |
|           \---nablarch        … HTMLチェックツール用のデータが格納されている。
|
+---tmp                         … ウェブアプリケーションのリクエスト単体テストで使用されるディレクトリ。疎通テスト実行時に自動生成される。
|
+---tools                       … Mavenと連携させて使用するツールの設定ファイルが格納されている。
|
\---work                        … 開発時に入力・出力ファイルを格納するための作業用ディレクトリ。疎通確認時に自動生成される。

8.5.2.2.2. ツールの設定

toolsフォルダには、Mavenと連携させて使用するツールの設定ファイルが含まれている。 以下に主なディレクトリとファイルを示す。

ディレクトリまたはファイル 説明
nablarch-tools.xml JSP静的解析ツールを実行する際に使用する設定ファイル
static-analysis/jspanalysis JSP静的解析ツールの設定ファイルが格納されている。

8.5.2.3. pj-jaxrsプロジェクト

RESTfulウェブサービスアプリケーションのwarファイルとしてパッケージングされるプロジェクト。

8.5.2.3.1. プロジェクトの構成

Webと同一であるため省略。

8.5.2.4. pj-batch-eeプロジェクト

JSR352に準拠したバッチアプリケーションのjarファイルとしてパッケージされるプロジェクト。

8.5.2.4.1. プロジェクトの構成

(ディレクトリ及びファイルの説明は、Web、batchに存在しない要素についてのみ記載)

myapp-batch-ee
|
|   pom.xml
|   README.md
|   distribution.xml                        … maven-assembly-pluginで使用する設定ファイル
|
+---db
|
+---h2
|   +---bin
|   |
|   \---db
|           SAMPLE.mv.db
|           SAMPLE.mv.db.org
|
+---src
|   +---env
|   |
|   +---main
|   |   +---java
|   |   |
|   |   \---resources
|   |       |   batch-boot.xml              … バッチ起動時に使用する設定ファイル。
|   |       |
|   |       +---entity
|   |       |
|   |       \---META-INF
|   |           |   beans.xml               … CDIを有効化するために必要なファイル。
|   |           |
|   |           +---batch-jobs
|   |           |       sample-batchlet.xml … batchlet方式の疎通確認用アプリケーションのジョブファイル。
|   |           |       sample-chunk.xml    … chunk方式の疎通確認用アプリケーションのジョブファイル。
|   |           |       sample-etl.xml      … ETL機能のジョブファイル。
|   |           |
|   |           \---etl-config
|   |                   sample-etl.json     … ETL機能のジョブの設定ファイル。
|   |
|   |
|   \---test
|       +---java
|       |
|       \---resources
|           |
|           +---data
|
+---testdata                                … 開発時にETL機能の入力・出力ファイルを格納するための作業用ディレクトリ。
|
\---work

8.5.2.4.2. 本番環境へのリリースについて

バッチアプリケーションのビルド時に target 配下に生成されるzipファイルの中には、 バッチアプリケーションの実行可能jarと依存ライブラリが格納されている。

そのため、本番環境へのリリース時は、以下の手順でバッチを実行できる。

  1. zipファイルを任意のディレクトリに解凍する。
  2. 以下のコマンドでバッチを実行する。
java -jar <実行可能jarファイル名> <ジョブ名>

8.5.2.5. pj-batchプロジェクト

Nablarchバッチアプリケーションのjarファイルとしてパッケージされるプロジェクト。

8.5.2.5.1. プロジェクトの構成

(ディレクトリ及びファイルの説明は、Webに存在しない要素についてのみ記載)

myapp-batch
|
|   pom.xml
|   README.md
|   distribution.xml                        … maven-assembly-pluginで使用する設定ファイル
|
+---db
|
+---h2
|   +---bin
|   |
|   \---db
|           SAMPLE.mv.db
|           SAMPLE.mv.db.org
|
+---src
|   +---env
|   |
|   +---main
|   |   +---java
|   |   |
|   |   +---resources
|   |   |   |   batch-boot.xml              … 都度起動バッチ起動時に指定する設定ファイル。
|   |   |   |   mail-sender-boot.xml        … メール送信バッチ起動時に指定する設定ファイル。
|   |   |   |   resident-batch-boot.xml     … テーブルをキューとして使ったメッセージング起動時に指定する設定ファイル。
|   |   |   |
|   |   |   \---entity
|   |   |
|   |   \---scripts                         … バッチ等の起動に使用するためのシェルスクリプトファイル(使用は任意)。
|   |
|   \---test
|       +---java
|       |
|       \---resources
|           |
|           \---data
|
\---work

8.5.2.5.2. 本番環境へのリリースについて

バッチアプリケーションのビルド時に target 配下に生成されるzipファイルの中には、 バッチアプリケーションの実行可能jarと依存ライブラリが格納されている。

そのため、本番環境へのリリース時は、以下の手順でバッチを実行できる。

  1. zipファイルを任意のディレクトリに解凍する。
  2. 以下のコマンドでバッチを実行する。
java -jar <実行可能jarファイル名> ^
    -diConfig <コンポーネント設定ファイル> ^
    -requestPath <リクエストパス> ^
    -userId <ユーザID>

8.5.2.6. pj-batch-dblessプロジェクト

DBに接続しないNablarchバッチアプリケーションのjarファイルとしてパッケージされるプロジェクト。

8.5.2.6.1. プロジェクトの構成

pj-batchプロジェクトの構成 からDB関連のディレクトリ及びファイルを除いただけであるため省略。

8.5.2.6.2. 本番環境へのリリースについて

バッチアプリケーションのビルド時に target 配下に生成されるzipファイルの中には、 バッチアプリケーションの実行可能jarと依存ライブラリが格納されている。

そのため、本番環境へのリリース時は、以下の手順でバッチを実行できる。

  1. zipファイルを任意のディレクトリに解凍する。
  2. 以下のコマンドでバッチを実行する。
java -jar <実行可能jarファイル名> ^
    -diConfig <コンポーネント設定ファイル> ^
    -requestPath <リクエストパス> ^
    -userId <ユーザID>

8.5.2.7. pj-container-webプロジェクト

ウェブアプリケーションがデプロイされたTomcatベースのDockerイメージをビルドするプロジェクト。

8.5.2.7.1. プロジェクトの構成

myapp-container-web
|
|   pom.xml                     … Mavenの設定ファイル
|   README.md                   … 本プロジェクトの補足説明(読み終わったら削除可)
|
+---db                          … 疎通アプリケーション用のDDL及びInsert文。RDBMS別に格納されている。
|
+---h2
|   +---bin                     … H2の起動に使用するファイルが格納されている。
|   |
|   \---db
|           SAMPLE.h2.db        … H2のデータファイル。
|           SAMPLE.h2.db.org    … H2のデータファイルのバックアップ。H2が起動しなくなった場合に「SAMPLE.h2.db」にコピーして使用する。
|
+---src
|   +---main
|   |   +---java                … 疎通確認用アプリケーションのクラスが格納されている。
|   |   |
|   |   +---resources           … 直下には設定ファイルが格納されている。
|   |   |   |
|   |   |   +---entity          … ER図のサンプル。gsp-dba-maven-pluginを使用する際のサンプルデータとして用意している。
|   |   |   |
|   |   |   \---net             … ルーティングアダプタ用設定ファイルが格納されている。
|   |   |
|   |   +---jib                 … コンテナイメージ上に配置するファイルが格納されている。
|   |   |
|   |   \---webapp
|   |       +---images          … 疎通確認用の画像ファイルが格納されている。
|   |       |
|   |       \---WEB-INF         … web.xmlが格納されている。
|   |            |
|   |            +---errorPages … エラー画面のサンプルが格納されている。
|   |            |
|   |            \---test       … 疎通確認画面用のファイルが格納されている。
|   |
|   |
|   \---test
|       +---java                … 疎通テスト用のユニットテストが格納されている。
|       |
|       \---resources           … 直下にはユニットテスト用の設定ファイルが格納されている。
|           |
|           +---data            … gsp-dba-maven-pluginを使用する際のサンプルデータとして用意している。
|           |
|           \---nablarch        … HTMLチェックツール用のデータが格納されている。
|
+---tmp                         … ウェブアプリケーションのリクエスト単体テストで使用されるディレクトリ。疎通テスト実行時に自動生成される。
|
+---tools                       … Mavenと連携させて使用するツールの設定ファイルが格納されている。
|
\---work                        … 開発時に入力・出力ファイルを格納するための作業用ディレクトリ。疎通確認時に自動生成される。
src/main/jib について

src/main/jib に配置したディレクトリやファイルは、そのままコンテナ上に配置される。 たとえば、 src/main/jib/var/foo.txt というファイルを配置した状態でコンテナイメージをビルドすると、コンテナ上の /var/foo.txt にファイルが配置される。 詳細は Jibのドキュメントを参照 (外部サイト、英語)。

ブランクプロジェクトでは、Tomcatのログ出力を全て標準出力にするために、Tomcatの設定ファイルがいくつか配置されている。

8.5.2.7.2. ツールの設定

Webと同一であるため省略。

8.5.2.8. pj-container-jaxrsプロジェクト

RESTfulウェブサービスアプリケーションがデプロイされたTomcatベースのDockerイメージをビルドするプロジェクト。

8.5.2.8.1. プロジェクトの構成

コンテナ版Webと同一であるため省略。

8.5.2.9. pj-container-batchプロジェクト

NablarchバッチアプリケーションがデプロイされたLinuxサーバのDockerイメージをビルドするプロジェクト。

8.5.2.9.1. プロジェクトの構成

(ディレクトリ及びファイルの説明は、コンテナ版Webに存在しない要素についてのみ記載)

myapp-container-batch
|
|   pom.xml
|   README.md
|
+---db
|
|
+---h2
|   +---bin
|   |
|   \---db
|           SAMPLE.mv.db
|           SAMPLE.mv.db.org
|
+---src
|   +---main
|   |   +---java
|   |   |
|   |   +---jib
|   |   |
|   |   +---resources
|   |   |   |   batch-boot.xml              … 都度起動バッチ起動時に指定する設定ファイル。
|   |   |   |   mail-sender-boot.xml        … メール送信バッチ起動時に指定する設定ファイル。
|   |   |   |   resident-batch-boot.xml     … テーブルをキューとして使ったメッセージング起動時に指定する設定ファイル。
|   |   |   |
|   |   |   \---entity
|   |   |
|   |   \---scripts                         … バッチ等の起動に使用するためのシェルスクリプトファイル(使用は任意)。
|   |
|   \---test
|       +---java
|       |
|       \---resources
|           |
|           \---data
|
\---work

8.5.2.10. 各プロジェクト共通の設定

各Mavenプロジェクトそれぞれで下記のように設定している。

以下に個々の詳細を示す。

8.5.2.10.1. プロファイル一覧

定義されているプロファイルの詳細については、各プロジェクトの pom.xml を参照。

以下に定義されているプロファイルを示す。

プロファイル名 概要
dev 開発環境用及び、ユニットテスト実行用のプロファイル。src/env/dev/resourcesディレクトリのリソースを使用する。
prod 本番環境用のプロファイル。src/env/prod/resourcesディレクトリのリソースを使用する。

補足

pom.xml 中のdevプロファイルにactiveByDefault要素が記述されており、デフォルトでdevプロファイルが使用されるようになっている。

注釈

コンテナ用のプロジェクトでは、環境ごとの違いはプロファイルではなくOS環境変数を使って切り替える。 したがって、コンテナ用のプロジェクトにはプロファイルが定義されていない。 詳しくは コンテナの本番環境設定 を参照。

8.5.2.10.1.1. プロファイルの使い方

これらのプロファイルは環境に応じた成果物を作成する際に使用する。

例えば、本番環境用のWARファイルを作成したい場合、 pj-webモジュール配下で、本番環境用プロファイルを指定してmvnコマンドを実行する。

以下にコマンドの例を示す。

mvn package -P prod -DskipTests=true

補足

上記コマンドでは、ユニットテストのスキップを指定している。

「mvn package」実行時には、デフォルトではユニットテストも併せて行われるが、本番環境用のプロファイルではユニットテストの実行に失敗するためである。

8.5.2.10.2. ビルドフェーズに追加されているゴール一覧

Mavenのデフォルトのビルドフェーズ定義に加えて、以下のゴールが実行されるように設定されている。

設定の詳細については、各プロジェクトの pom.xml 及び、 nablarch-archetype-parent(親プロジェクト)pom.xml を参照のこと。

ビルドフェーズ ゴール 概要
initialize jacoco:prepare-agent JaCoCoの実行時エージェントを準備する。
pre-integration-test jacoco:prepare-agent-integration 結合試験用にJaCoCoの実行時エージェントを準備する。

補足

gsp-dba-maven-pluginの実行はMavenのビルドフェーズに紐づかないため、エンティティの自動生成など、gsp-dba-maven-pluginで実装されているゴールを実行したい場合は、ゴールを手動で実行すること。

8.5.2.10.3. コンパイルに関する設定

設定内容については、各プロジェクトの pom.xml 及び、 nablarch-archetype-parent(親プロジェクト)pom.xml を参照。

8.5.2.10.4. ツールの設定

ツールの設定は、pom.xml (各プロジェクト及び、 nablarch-archetype-parent(親プロジェクト) )に記載されている。 親プロジェクトに記載されているツールについては、 アーキタイプから生成したプロジェクトに組み込まれているツール を参照。

8.5.2.11. ビルド設定

以下のような場合は、各モジュールのpom.xmlを変更する。

  • モジュール個別で使用する依存ライブラリを追加・変更する。例えば、使用するNablarchのバージョンを変更するために、nablarch-bomのバージョンを修正する場合が該当する。
  • モジュール個別で使用するMavenプラグインを追加・変更する。

8.5.2.11.1. 使用するNablarchのバージョンを変更する場合の例

以下にNablarch5u6を使用する場合の設定例を示す。

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>com.nablarch.profile</groupId>
      <artifactId>nablarch-bom</artifactId>

      <!--
      使用するNablarchのバージョンと対応したバージョンを指定する。
      この例は5u6を指定している。
      -->
      <version>5u6</version>

      <type>pom</type>
      <scope>import</scope>
    </dependency></dependencyManagement>

8.5.2.11.2. 依存ライブラリ追加の例

以下にpj-webモジュールで暗号化ユーティリティを使用するために、nablarch-common-encryptionへの依存を追加する場合の例を示す。

なお、依存を追加する場合にはscopeの設定を適切に行うこと。scopeの設定を怠ると、ユニットテストでのみ使用するはずのモジュールが本番でも使用されるといった問題が起きる可能性がある。

<dependencies><dependency>
    <groupId>com.nablarch.framework</groupId>
    <artifactId>nablarch-common-encryption</artifactId>
  </dependency></dependencies>

Nablarchのライブラリの場合、pom.xmlにバージョン番号は通常指定しなくても良い(nablarch-bomに対するバージョン指定により、個々のライブラリのバージョンが決定するため)。

8.5.3. 【参考】プロジェクト分割方針

8.5.3.1. 推奨するプロジェクト構成の方針

以下に推奨するプロジェクト構成の方針を示す。

  • 作成するアプリケーションが1つの場合(ウェブのみ、バッチのみ等)は、それぞれ単体のプロジェクトで構成する。
  • 社内用と社外用で2つのウェブアプリケーションを作成するようなケースでは、無理に1つのMavenプロジェクトにまとめず、個別にMavenプロジェクトを作ること。
  • 複数のアプリケーションが存在し、共通化したいライブラリが存在する場合は、共通ライブラリを配置するMavenプロジェクトを作る。
  • 実行制御基盤を追加した際は、実行制御基盤毎にMavenプロジェクトを作る。例えば、メッセージング実行制御基盤を使用したアプリケーションを追加する場合は、新しくMavenプロジェクトを作る。
  • 必要以上にプロジェクトは分割しない。詳細は、 プロジェクトを過度に分割した場合の問題点 を参照。

補足

プロジェクトを分割する際には、リソースの重複が無い様に注意すること。

例えば、gsp-dba-maven-plugin(外部サイト) で使用するedmファイルを複数のMavenプロジェクトに混在させると、重複したEntityクラスが複数のMavenプロジェクトに存在することになる。

8.5.3.2. プロジェクトを過度に分割した場合の問題点

プロジェクトを過度に分割した場合の問題点を以下に示す。

  • ビルド及びデプロイの手順が複雑になる。
  • 結合テスト以降で、どのモジュールを組み合わせてテストしたか管理が複雑になる。

一般的には、Mavenプロジェクトは少ないほうが開発をスムーズに進めることが出来る。