Java/Maven/Mavenの特徴

Top > Java > Maven > Mavenの特徴



Mavenの特徴

設定より規約

Mavenは、Convention over Configuration(設定より規約)を採用しているので、規約に従う部分は設定の必要がありません。

ディレクトリレイアウト

Mavenでは次のようなディレクトリレイアウトがデフォルトになっています。
特に理由がない限り、規約に従うのがよいと思います。

dir_layout.png
 

ビルドライフサイクルとフェーズ

phase_gole.png
 
  • ビルドライフサイクル
    「コンパイル」→「テスト」→「成果物の生成」などのような、作業プロセスを、ビルドライフサイクルと呼びます。
    ビルドライフサイクルは、定義されている作業ステップを順番に処理していきます。
    buildlife_cycle.png
  • フェーズ
    作業ステップを、フェーズと呼びます。
    フェーズの集合体がビルドライフサイクルです。
     
  • プラグイン
    フェーズに作業内容を提供します。
     
  • ゴール
    プラグインがフェーズに提供する作業内容を、ゴールと呼びます。

フェーズとゴールのマッピング

  • クリーン ビルドライフサイクル
    clean_bls.png
     
  • デフォルト ビルドライフサイクル
    「デフォルト」ビルドサイクルのマッピングは、パッケージングごとに定義されています。
    パッケージングが jar の場合は、次のようになっています。
    default_bls.png
     
  • サイト ビルドライフサイクル
    site_bls.png

※ゴールがマッピングされていないフェーズはスキップされます。ユーザーが独自にゴールをマッピングすることも可能です。

次の表はデフォルトビルドライフサイクルのゴールが、マッピングされているフェーズを抽出したものです。

default_bls_pickup.png

例えば、testフェーズが指定された場合、 Mavenは、process-resources から test フェーズまでを実行します。
Mavenにはビルドライフサイクルが定義されているので、通常、ユーザーが作業プロセスを定義する必要がありません。

 

依存関係を再帰的に解決

依存関係の参照

Mavenでは、依存関係の依存関係を推移的依存関係と言います。
アプリケーションAの設定ファイルに、直接の依存関係(ライブラリB)を定義すれば推移的依存関係(ライブラリC)も自動的に解決されます。

dependency1.png

例えば、ライブラリBがバージョンアップして、ライブラリDに依存するようになった場合も…

dependency2.png

アプリケーションAの設定ファイルに、直接の依存関係(ライブラリB)を定義すれば推移的依存関係(ライブラリC、ライブラリD)も自動的に解決されます。

 

依存関係の解決

Mavenはビルド実行時に、まずはローカルリポジトリで依存関係を解決しようと試みます。
ローカルリポジトリで依存関係が解決できない場合は、リモートリポジトリからローカルリポジトリへダウンロードします。

  • ローカルリポジトリ
    %USERPROFILE%\.m2\repository(デフォルト値)
    ローカルリポジトリは自動で作成されます。
     
  • リモートリポジトリ
    • セントラルリポジトリ
      http://repo1.maven.org/maven2/ (デフォルト値)
    • codehaus
      http://snapshots.repository.codehaus.org/org/codehaus/mojo/
      など
       
      セントラルリポジトリには、多数のライブラリが格納されているので、特別な設定をしなくても、依存関係の解決が可能になっています。
      リモートリポジトリを追加することにより、解決できる依存関係を増やすことができます。
       

リポジトリの配置ルール

では、Mavenは実際にどのように依存関係を特定しているのでしょうか?
リポジトリの配置には、次のようなルールがあります。

  • リポジトリ/グループIDをディレクトリ階層化/アーティファクトID/バージョン/アーティファクトID-バージョン.パッケージング
     

例えば、セントラルリポジトリに配置されているLog4jは、次のようなURLになっています。

  • http://repo1.maven.org/maven2/log4j/log4j/1.2.14/log4j-1.2.14.jar
     
    Log4jを依存関係に含める場合は、以下の情報をMavenに伝えることにより、依存関係を解決してくれます。
    log4j_dependency.png
    Mavenの成果物は、グループID、アーティファクトID、バージョンで、一意な存在になっています。
    グループID、アーティファクトIDは、それぞれ、Javaのパッケージ名、クラス名のようなものです。
    パッケージングは、jar(デフォルト),war, ear, pomなどが存在します。
     

依存関係のスコープ

スコープ説明
compileコンパイル時と実行時(テスト含む)に必要な依存関係。(デフォルト)
providedコンパイル時とテストの実行時には必要だが、実行時には(実行環境から提供されるため)不要な依存関係。Servlet APIなど。
runtimeコンパイル時には必要ないが、実行時(テスト含む)に必要な依存関係。
testテストのコンパイル時と、テストの実行時に必要な依存関係。
systemprovidedとほぼ同等だが、パスを指定する必要がある依存関係。JDKに含まれるtools.jarなど。

最終更新日: 2009-10-14 (水) 17:09:07 (2815d)

添付ファイル: filelog4j_dependency.png 795件 [詳細] filedependency2.png 799件 [詳細] filedependency1.png 781件 [詳細] filedefault_bls_pickup.png 842件 [詳細] filesite_bls.png 764件 [詳細] filedefault_bls.png 851件 [詳細] fileclean_bls.png 838件 [詳細] filephase_gole.png 783件 [詳細] filebuildlife_cycle.png 829件 [詳細] filedir_layout.png 863件 [詳細]

このページをブックマーク:

このページのURL(コピペして利用下さい):

TOP