Mavenについてまとめてみました

maven Maven

参考サイト:http://www.techscore.com/tech/Java/ApacheJakarta/Maven/index/

Mavenとは

Mavenはプロジェクト管理ツールです。プロジェクトに関する色々な情報をPOMに集約し、POMの情報に基づきプロジェクト全体を管理します。
Mavenを使用すると、プロジェクトのライフサイクルに含まれるコンパイルやテストなどの各作業をコマンド一つで行うことができます。

maven.png

  • リモートリポジトリとローカルリポジトリは、どちらもプラグインやライブラリが置かれる場所です。
  • Mavenは必要なプラグインやライブラリをリモートリポジトリからダウンロードし、それをローカルリポジトリに保存します。
  • 各プロジェクトはローカルリポジトリに保存されているライブラリを参照します。
  • ローカル環境にある全てのプロジェクトの間でライブラリを共有することができます。
  • リモートリポジトリは独自のものを用意することもできます。
    例えば、社内用のリポジトリを用意して、社内で作成したプロジェクトはそこに公開するという使い方ができます。

POMについて

pom.xmlはプロジェクトに関する情報を持つファイルです。

project 要素以下の各要素が持つ意味

要素 内容
modelVersion POMのバージョン
groupId プロジェクトを一意に識別する名前。プロジェクトのルートパッケージ名を指定するのが一般的です。
artifactId プロジェクトの成果物の名前。 作成する JAR や WAR, EAR ファイルなどの名前に使用されます。
packaging 作成する成果物のパッケージング・タイプ。 jar (デフォルト), war, ear などがあります。
version プロジェクトのバージョン。
name プロジェクトの表示名。 ドキュメントを作成するときなどに使用されます。
url プロジェクトのサイトの URL。 ドキュメントを作成するときなどに使用されます。
dependencies プロジェクトが依存するライブラリの情報。

コンパイル

mvn compile

src/main/java/配下のソースファイルのコンパイルが行われます。
コンパイルにより作成されたクラスファイルはtarget/classesディレクトリに出力されます。

テスト

mvn test

デフォルトでは、以下のパターンにマッチするファイルがテストとして実行されます。

  • **/Test*.java
  • **/*Test.java
  • **/*TestCase.java

また、以下のファイルはデフォルトで除外されます

  • **/Abstract*Test.java
  • **/Abstract*TestCase.java
  • **/*$*

パッケージング

mvn package

成功するとtargetディレクトリに**.jarのようなファイルが作成されます。
作成されるファイルの名前は、pom.xmlに記述されている artifactIdversionから決定されます。
拡張子は,pom.xmlに記述されているpackagingから決定されます。

ローカルリポジトリへのインストール

mvn install

作成したパッケージングファイルはローカルリポジトリにインストールすることで、ローカルにある他のプロジェクトから参照することができるようになります。

リモートリポジトリへのデプロイ

リモートリポジトリに配備するには、事前にリモートリポジトリの情報を pom.xml に記述しておく必要があります。
リモートリポジトリの情報は、distributionManagement 要素の入れ子としてrepository要素を追加します。 repositoryの子要素にはid (リポジトリの識別子), name (リポジトリの名前), url (リポジトリの場所を示す URL)などが指定可能です。

設定例

<distributionManagement>
    <repository>
      <id>deploy-repository</id>
      <name>repository-name</name>
      <url>http://hoge/deployRepository</url>
    </repository>
</distributionManagement>

作成したパッケージングファイルをリモートリポジトリに配備するには、次のコマンドを実行します

mvn deploy

最後に

最近業務でmavenについて実はよく理解できていないんじゃないかと思うことが多々合ったので、復習を兼ねて備忘録を書きました。
改めて図などにしてみることで理解が深まった気がします。
Sonatype Nexuseclipseとの連携について学習したく思ってまして、そのあたりの記事も掲載したいですね。