Mavenのアーキテクチャについて

本記事では、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のartifactIdversionタグに指定した名前になります。

~~ 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の内容について詳しく調べていきたいとお思います。