pom.xmlに記載したmoduleのパッケージは、全部ビルドされる
pom.xmlは、Mavenプロジェクトのビルド、依存関係、プロジェクト情報を管理するためのファイルです。
Maven では、マルチモジュールプロジェクトを作成することができます。
マルチモジュールプロジェクトでは、親プロジェクト(親 pom.xml)と複数の子プロジェクト(各子プロジェクトの pom.xml)が存在します。
親 pom.xml にモジュールとして記載されているプロジェクトは、親プロジェクトのビルド時に一緒にビルドされます。
例えば、親プロジェクトの pom.xml が次のようになっているとします。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>parent-project</artifactId> <version>1.0.0-SNAPSHOT</version> <packaging>pom</packaging> <modules> <module>module-a</module> <module>module-b</module> </modules> </project>
この場合、親プロジェクトの pom.xml には module-a と module-b というモジュールが定義されています。
親プロジェクトのディレクトリ構造は次のようになります。
parent-project/ ├── pom.xml ├── module-a/ │ └── pom.xml └── module-b/ └── pom.xml
この状態で親プロジェクトのディレクトリ(parent-project/)で mvn install を実行すると、module-a と module-b が親プロジェクトと一緒にビルドされます。
つまり、モジュールとして記載されたパッケージは、親プロジェクトに対して mvn install を実行した際に一緒にビルドされます。
子モジュールをビルドした場合は親モジュールはビルドされない
子モジュールを個別にビルドした場合、親モジュールはビルドされません。
Maven では、モジュールの依存関係は下位から上位へ向かう一方向のものです。
つまり、子モジュールは親モジュールに依存しますが、その逆はありません。
上記の例で、子モジュールのmodule-a の pom.xml の内容が以下である時、
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.example</groupId> <artifactId>parent-project</artifactId> <version>1.0.0-SNAPSHOT</version> </parent> <artifactId>module-a</artifactId> <version>1.0.0-SNAPSHOT</version> </project>
このような構成のプロジェクトで module-a のディレクトリに移動して mvn install を実行した場合、以下の動作が行われます。
1. Maven は module-a の pom.xml を読み込みます。
2. module-a の依存関係が解決され、ビルドが行われます。
3. 親プロジェクトの pom.xml が参照されるが、親プロジェクト自体はビルドされません。
ですので、子モジュールをビルドした場合に親モジュールが自動的にビルドされることはありません。
親モジュールをビルドするためには、親プロジェクト全体をビルドする必要があります。