Java好き

カテゴリ:Apache > Maven

「pom.xmlの継承(共有)」や「プロジェクトフォルダの乱立を防ぐ」など
メリットが多いので、使ってない場合は使うべき。

スポンサードリンク

概要

プロジェクトが大きくなるにつれ、
1つのプロジェクトだけで管理するのが難しいときがある。

例えば、Webアプリケーションを作っていて
途中でバッチも必要になるとする。
こんなときは、Webと混在させるのも変なので
可能であれば別プロジェクトにしておきたいところ。

ただこのとき、新規に別プロジェクトにしてしまうと
jarのバージョンであったり共有したい設定があっても
別々に管理しなければならない。

こんなとき、Mavenのモジュール機能を利用するといろいろ解決してくれる。
「pom.xmlの継承(共有)」や「プロジェクトフォルダの乱立を防ぐ」など
メリットが多いので、使ってない場合は使うべき。

基本

親プロジェクト下に子モジュールがたくさん

Mavenモジュール化を行う場合は、次のような形でプロジェクトを作っていく。
親プロジェクトの下に子モジュールがたくさんという形になる。

Mavenモジュール化-概要図

このとき、次のことに注意する。

  • モジュール間の循環参照はできない。

親プロジェクト直下に子モジュール(プロジェクト)が配置される

Mavenモジュール化を利用した場合の構成は次のようになる。

Mavenモジュール化-パッケージ

このように、子モジュールは親プロジェクトの配下となる。
よって、プロジェクトフォルダが乱立するのも防ぐことができる。

親プロジェクトのpom.xmlの継承(共有)される

Mavenのモジュールを利用する場合は、
子モジュールは親モジュールのpom.xmlを継承するようになる。

よって、親モジュールで書かれている内容は子モジュールで書く必要はないし、
変更したい場合は、子モジュールのpom.xmlを追記するだけでよい。

これにより、共有したい設定と個々の設定が柔軟に可能になる。

dependencyManagementを使う

dependencyManagementは、
平たくいうとjarのバージョンのみを指定しているだけのようなもの。
よって、実際には依存していない。

親プロジェクトがdependenciesを指定してしまうと、
子プロジェクトで全て共有されることになる。

必ずしも共有したくないこともあるので、
親はdependencyManagement、子はdependenciesしておくと柔軟に設定できる。

手順

EclipseでMavenモジュール化を行う場合の手順。

01.親プロジェクトをpomで作成する

次の通り。

  1. ウィザードの「Mavenプロジェクト」を選択。
  2. アーキタイプはスキップしてよい。
  3. 親のグループIdとアーキテクトIdを入力して、パッケージングを「pom」にする。
    そして完了。

Mavenモジュール化-手順-01 Mavenモジュール化-手順-02 Mavenモジュール化-手順-03

02.リポジトリに登録する

親プロジェクトを作成した段階でリポジトリ登録するとよい。

特にgitは作業リポジトリが別のところになるので、
子プロジェクトを作成した後では移動などが面倒。

03.子プロジェクト(モジュール)を作成する

次の通り。

  1. ウィザードの「Mavenモジュール」を選択。
  2. 子プロジェクトのモジュール名を入力。親プロジェクトに先ほど作成したものを選択する。
  3. パッケージングをそのモジュールのものにして、完了。

Mavenモジュール化-手順-04 Mavenモジュール化-手順-05 Mavenモジュール化-手順-06

これを子モジュールの分だけ繰り返せばよい。

EclipseでMavenとGitを利用したプロジェクト作成の流れを
まとめる。

Eclipseのプラグインとしては、
m2eとegitを使うことになる。

準備

m2eプラグインの設定

m2eプラグインでインストールしたMavenの追加するため、
「設定」-「Maven」-「インストール」で設定する。

「追加」ボタンを押下して、Mavenのインストールディレクトリを指定する。

Maven_Git_Eclipse01

手順

Mavenプロジェクトの作成

ウィザードを利用してMavenプロジェクトを作成する。

このとき「アーキタイプ」の選択と、「グループId」「アーティファクトId」の入力が必要になる。
ここではアーキタイプ「maven-archetype-quickstart」を利用する。

Maven_Git_Eclipse02 Maven_Git_Eclipse03 Maven_Git_Eclipse04 Maven_Git_Eclipse05

JavaコンパイラとJUnitのバージョンの設定

デフォルトではコンパイラが1.5に設定されているので
最新のJavaを利用する場合は、pom.xmlに追加して修正。

また、Junitのバージョンも古いので変更。

コンパイラの設定
<build>
  <plugins>
    <plugin>
      <artifactId>maven-compiler-plugin</artifactId>
      <configuration>
        <source>1.7</source>
        <target>1.7</target>
      </configuration>
    </plugin>
  </plugins>
</build>
Junitの設定
<dependencies>
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.8.2</version>
    <scope>test</scope>
  </dependency>
</dependencies>

Gitで共有する

最後にGitにコミットする。

作成したプロジェクトを右クリックして、「チーム」-「プロジェクトの共有」から「Git」を選択。
その後はGitの環境に従って設定する。

設定が終わると最初のコミットをするが、このとき「target」あたりは共有しない方がよい。

Mavenは、Javaのビルドツール。

Javaの開発で煩雑になるjarファイルを、
依存関係を考慮した上で自動でダウンロードして管理してくれるのでそれだけでも秀逸。

使いこなせれば、開発から配備までのほとんどの部分を自動化できる。

インストール

簡単。環境変数を設定するのを忘れないこと。

  1. JDKの1.6以上がインストールされているか確認。(なければインストール)
  2. 公式サイトダウンロードページからMavenのバージョン3をダウンロード。
  3. zipを好きな場所に展開。
  4. 次の環境変数を設定。
    1. 「M2_HOME」→zipを展開した場所。
    2. 「PATH」→「;%M2_HOME%\bin」を追加。
  5. バージョンを確認するコマンド「mvn --version」を実行して、
    インストールしたバージョンか確認する。
Maven3_01

基本

defaultのライフサイクル

コンパイル、テスト、デプロイなど基本動作の処理をするには、
defaultのライフサイクルを頭に入れておく必要がある。

フェーズを実行したい場合は、mvnコマンドで指定する。
例えば「package」の場合は、「mvn package」。

こので重要なのは、
実行したフェーズに先行するフェーズがすべて実行されてから、、
そのフェーズが実行されるということ。

先ほどの「package」では、
「validate」「compile」「test」が実行されてから「package」が実行されることになる。
(「package」のみが実行されるということではない)

フェーズ 処理内容
validate プロジェクト情報が正しいかチェックする。
compile ソースコードをコンパイルする。
test 単体テストを実行する。
package コンパイルされたものを配布形式にまとめる。
integration-test 統合テスト環境でパッケージを処理する。
verify パッケージが有効なことをチェックする。
install ローカルリポジトリにパッケージをインストールする。
deploy リモートリポジトリに最終的なパッケージをインストールする。