本記事では、Mavenのアーキテクチャを紹介します。
- Mavenのアーキテクチャ
- Mavenのビルドステップ
- コンパイル
- テスト
- パッケージング
- インストール
- デプロイ
Mavenのアーキテクチャ
Mavenのアーキテクチャは、「pom.xml」「ローカルレポジトリ」「リモートレポジトリ」の三つがあります。それぞれの役割は以下の通りです。
- pom.xml・・・ビルドから成果物の管理までのプロセスを記述したファイル
- ローカルレポジトリ・・・リモートレポジトリからダウンロードしたライブラリやプラグインを保存しておく場所
- リモートレポジトリ・・・ローカルレポジトリに必要なライブラリやプラグインが存在しない場合に、参照するレポジトリ
それぞれの関係を図示すると以下の通りです。pom.xmlには、「コンパイル」「テスト」「パッケージング」「インストール」「デプロイ」のステップがあります。各ステップについては、次節で説明します。

Mavenのビルドステップ
pom.xmlに記述する各ビルドステップについて説明します。
コンパイル
Javaソースコードをコンパイルして実行可能なファイルを生成をするステップで、以下のコマンドで単独実行できます。
$ mvn compile
コンパイルステップでは、target/classesにクラスファイルが生成されます。
テスト
ユニットテストを実行するステップで、以下のコマンドで単独実行できます。
$ mvn test
デフォルトでは以下のファイル名をテストクラスとして実行します。他のファイル名で実行したい場合は、pom.xmlのbuild
タグで定義する必要があります。
**/Test*.java
**/*Test.java
**/*Tests.java
**/*TestCase.java
デフォルトで以下のAppTest.javaが作成されています。assertTrue
は引数の値をtrueかfalseを確認するメソッドなので、必ず成功するテストクラスです。
package com.example; import static org.junit.Assert.assertTrue; import org.junit.Test; /** * Unit test for simple App. */ public class AppTest { /** * Rigorous Test :-) */ @Test public void shouldAnswerWithTrue() { assertTrue( true ); } }
junitをimportしているので、junitのライブラリが必要になります。デフォルトのpom.xmlではdependencies
タグにjunitが定義されていて、ライブラリを取得するよう定義しています。
~~ pom.xmlより抜粋 ~~ <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> </dependencies> ~~ pom.xmlより抜粋 ~~
パッケージング
JARファイルを作成するステップで、以下のコマンドで単独実行できます。
$ mvn package
デフォルトではtarget/hello-world-1.0-SNAPSHOT.jarが作成されます。ファイル名は、pom.xmlのartifactId
とversion
タグに指定した名前になります。
~~ pom.xmlより抜粋 ~~ <artifactId>hello-world</artifactId> <version>1.0-SNAPSHOT</version> ~~ pom.xmlより抜粋 ~~
インストール
作成したJARファイルをローカルレポジトリに登録するステップで、以下のコマンドで単独実行できます。
$ mvn install
インストールしたJARファイルは他のプロジェクトで利用することができます。

デプロイ
作成したJARファイルをリモートレポジトリに登録するステップで、以下のコマンドで単独実行できます。
$ mvn deploy
インストールとの違いは、登録したJARファイルを他のマシンでも利用できるかどうかです。デプロイステップで登録したJARファイルは、以下のように他のマシンでも利用が可能になります。

リモートレポジトリはpom.xmlで設定できます。以下のようにdistributionManagement
タグで李モートレポジトリのURLを指定します。
~~ pom.xmlより抜粋 ~~ <project> <distributionManagement> <repository> <id>[Remote Repository ID]</id> <name>[Remote Repository name]</name> <url>[Remote Repository URL]</url> </repository> </distributionManagement> </project> ~~ pom.xmlより抜粋 ~~
以上です。次はpom.xmlの内容について詳しく調べていきたいとお思います。