Apache Maven


Apache_Maven

Mavenは、主にJavaプロジェクトに使用されるビルド自動化ツールです。Mavenは、C#、Ruby、Scala、およびその他の言語で記述されたプロジェクトの構築と管理にも使用できます。MavenプロジェクトはによってホストされているApache Software Foundationのそれは、以前の一部であった、Jakartaプロジェクト。 Apache Maven 開発者
Apache Software Foundation
初回リリース
2004年7月13日; 17年前 (2004-07-13)
安定リリース
3.8.2 / 2021年8月4日 ; 56日前  (2021-08-04)
リポジトリ
Mavenリポジトリ
で書かれている Java タイプ
ビルドツール
ライセンス
Apacheライセンス2.0
Webサイト
maven .apache .org
Mavenは、ソフトウェア構築の2つの側面、つまりソフトウェアの構築方法とその依存関係に対処します。Apache Antのような以前のツールとは異なり、ビルド手順には規則を使用します。例外のみを指定する必要がXMLのファイルが構築されているソフトウェアプロジェクトを説明し、他の外部モジュールとコンポーネント、ビルド順序、ディレクトリ、および必要にその依存関係のプラグイン。コードのコンパイルやそのパッケージ化など、明確に定義された特定のタスクを実行するための事前定義されたターゲットが付属しています。Mavenは、JavaライブラリとMavenプラグインをMaven 2中央リポジトリなどの1つ以上のリポジトリから動的にダウンロードし、ローカルキャッシュに保存します。ダウンロードされたアーティファクトのこのローカルキャッシュは、ローカルプロジェクトによって作成されたアーティファクトで更新することもできます。公開リポジトリも更新できます。
Mavenは、プラグインベースのアーキテクチャを使用して構築されているため、標準の入力で制御可能な任意のアプリケーションを利用できます。A C / C ++、ネイティブプラグインはMavenの2維持される
ビルドツールとしてのGradleやsbtなどの代替テクノロジーは、XMLに依存しませんが、Mavenが導入した主要な概念を維持します。Apacheのアイビー、専用の依存関係の管理も、Mavenのリポジトリをサポートしていることなども開発されました。
Apache Mavenは、再現可能なビルドをサポートしています。

コンテンツ
1 歴史2 構文 3 設計
3.1 プロジェクトオブジェクトモデル 3.2 プラグイン 3.3 ライフサイクルを構築する 3.43.4 依存関係
4 相互運用性
5 も参照してください
6 参考文献
7 参考文献
8 外部リンク

歴史
image"
  Mavenの中央リポジトリにあるアーティファクトの数は急速に増加しています
Jason van Zylによって作成されたMavenは、2002年にApache Turbineのサブプロジェクトとして開始されました。2003年に、トップレベルのApache Software Foundationプロジェクトに投票され、承認されました。2004年7月、Mavenのリリースは重要な最初のマイルストーンであるv1.0でした。Maven 2は、ベータサイクルで約6か月後、2005年10月にv2.0として宣言されました。Maven 3.0は2010年10月にリリースされ、ほとんどがMaven2との下位互換性が
Maven 3.0の情報は2008年に少しずつ出始めました。8つのアルファリリースの後、Maven3.0の最初のベータバージョンが2010年4月にリリースされました。Maven3.0はコアProjectBuilderインフラストラクチャを作り直し、POMのファイルベースの表現をその内部から切り離しました。メモリオブジェクトの表現。これにより、Maven3.0アドオンが非XMLベースのプロジェクト定義ファイルを活用する可能性が広がりました。提案されている言語には、Ruby(Jason van Zylによるプライベートプロトタイプに既に含まれています)、YAML、Groovyなどが
Maven3とMaven2の下位互換性を確保するために特別な注意が払われました。ほとんどのプロジェクトでは、Maven3にアップグレードするためにプロジェクト構造を調整する必要はありません。Maven 3の最初のベータ版では、マルチコアマシンで構成可能な数のコアを活用し、特に大規模なマルチモジュールプロジェクトに適した並列ビルド機能が導入されました。

構文
image
  Mavenによって自動生成されたJavaプロジェクトのディレクトリ構造
Mavenプロジェクトは、-ファイルに格納されているプロジェクトオブジェクトモデル(POM)を使用して構成されpom.xmlます。サンプルファイルは次のようになります。 <!-Maven 2.xPOMのモデルバージョンは常に4.0.0-> 4.0.0 <!-プロジェクト座標、つまりこのプロジェクトを一意に識別する値のグループ-> < groupId > com.mycompany.app my-app 1.0 <!-ライブラリの依存関係->
<! -必要なライブラリの座標->
junit
junit
3.8.1
<!-この依存関係は、テストの実行とコンパイルにのみ使用されます->
<スコープ>テスト
このPOMは、プロジェクトの一意の識別子(座標)とJUnitフレームワークへの依存関係のみを定義します。ただし、プロジェクトをビルドし、プロジェクトに関連付けられた単体テストを実行するには、これですでに十分です。Mavenはのアイデア受け入れることによってこれを達成する設定より規約を、つまり、Mavenはプロジェクトの設定のデフォルト値を提供します。
通常の慣用的なMavenプロジェクトのディレクトリ構造には、次のディレクトリエントリが
ディレクトリ名 目的
プロジェクトホーム pom.xmlとすべてのサブディレクトリが含まれています。
src / main / java プロジェクトの成果物のJavaソースコードが含まれています。
src / main / resources プロパティファイルなど、プロジェクトの成果物リソースが含まれています。
src / test / java プロジェクトのテストJavaソースコード(JUnitやTestNGテストケースなど)が含まれています。
src / test / resources テストに必要なリソースが含まれています。
このコマンドmvn packageは、すべてのJavaファイルをコンパイルし、テストを実行し、成果物のコードとリソースをにパッケージ化しますtarget/my-app-1.0.jar(artifactIdがmy-appで、バージョンが1.0であると想定しています)。
Mavenを使用すると、ユーザーはプロジェクトの構成のみを提供し、構成可能なプラグインは、プロジェクトのコンパイル、ターゲットディレクトリのクリーニング、単体テストの実行、APIドキュメントの生成などの実際の作業を行います。一般に、ユーザーは自分でプラグインを作成する必要はありません。これをAntと比較して、前述のタスクを実行するための命令型の手順を作成するmakeを作成します。

設計

プロジェクトオブジェクトモデル
プロジェクトオブジェクトモデル(POM)は、単一のプロジェクトのすべての構成を提供します。一般的な構成には、プロジェクトの名前、所有者、および他のプロジェクトへの依存関係が含まれます。プラグインとして実装されるビルドプロセスの個々のフェーズを構成することもできます。たとえば、コンパイルにJavaバージョン1.5を使用するようにコンパイラプラグインを構成したり、一部の単体テストが失敗した場合でもプロジェクトをパッケージ化するように指定したりできます。
大規模なプロジェクトは、それぞれ独自のPOMを持ついくつかのモジュールまたはサブプロジェクトに分割する必要が次に、1つのコマンドですべてのモジュールをコンパイルできるルートPOMを作成できます。POMは、他のPOMから構成を継承することもできます。すべてのPOMは、デフォルトでスーパーPOM から継承します。スーパーPOMは、デフォルトのソースディレクトリ、デフォルトのプラグインなどのデフォルト設定を提供します。

プラグイン
Mavenの機能のほとんどはプラグインにプラグインは、コマンドを使用して実行できる一連の目標を提供しますmvn :。たとえば、Javaプロジェクトは、を実行することにより、compiler-pluginのcompile-goal を使用してコンパイルできますmvn compiler:compile。
ビルド、テスト、ソース管理管理、Webサーバーの実行、Eclipseプロジェクトファイルの生成などのためのMavenプラグインがプラグインは、pom.xmlファイルのセクションで導入および構成されます。いくつかの基本的なプラグインはデフォルトですべてのプロジェクトに含まれており、それらには賢明なデフォルト設定が
ただし、ソフトウェアプロジェクトの構築、テスト、およびパッケージ化の典型的なビルドシーケンスで、それぞれの目標を手動で実行する必要がある場合は、面倒です。
mvn compiler:compile
mvn surefire:test
mvn jar:jar
Mavenのライフサイクルコンセプトはこの問題を処理します。
プラグインは、Mavenを拡張するための主要な方法です。Mavenプラグインの開発は、org.apache.maven.plugin.AbstractMojoクラスを拡張することで実行できます。アプリケーションサーバーを実行するクラウドベースの仮想マシンを作成するためのMavenプラグインのサンプルコードと説明は、記事「クラウド仮想マシンの開発と管理の自動化」に記載されています。

ライフサイクルを構築する
ビルドライフサイクルは、目標の実行に順序を与えるために使用できる名前付きフェーズのリストです。Mavenの標準ライフサイクルの1つは、デフォルトのライフサイクルであり、次のフェーズがこの順序で含まれています。
検証
生成ソース
プロセスソース
生成リソース
プロセスリソース
コンパイル
プロセス-テスト-ソース
プロセス-テスト-リソース
テストコンパイル
テスト
パッケージ
インストール
配備
プラグインによって提供される目標は、ライフサイクルのさまざまなフェーズに関連付けることができます。たとえば、デフォルトでは、目標「compiler:compile」は「compile」フェーズに関連付けられていますが、目標「surefire:test」は「test」フェーズに関連付けられています。ときにmvn testコマンドが実行され、Mavenは、「テスト」相を含むと、最大相のそれぞれに関連付けられたすべての目標を実行します。このような場合、Mavenは「process-resources」フェーズに関連付けられた「resources:resources」ゴールを実行し、次に「compiler:compile」というように、最終的に「surefire:test」ゴールを実行します。
Mavenには、プロジェクトのクリーニングとプロジェクトサイトの生成のための標準フェーズもクリーニングがデフォルトのライフサイクルの一部である場合、プロジェクトはビルドされるたびにクリーニングされます。これは明らかに望ましくないため、クリーニングには独自のライフサイクルが与えられています。
標準のライフサイクルにより、プロジェクトを初めて使用するユーザーは、単一のコマンドを発行することで、すべてのMavenプロジェクトを正確にビルド、テスト、およびインストールできmvn installます。デフォルトでは、MavenはPOMファイルを生成されたJARファイルとWARファイルにパッケージ化します。Diet4j のようなツールは、この情報を使用して、すべてのプロジェクトコードを含む「uber」-jarを必要とせずに、実行時にMavenモジュールを再帰的に解決して実行できます。

依存関係
Mavenの中心的な機能は、依存関係の管理です。Mavenの依存関係処理メカニズムは、ソフトウェアライブラリやモジュールなどの個々のアーティファクトを識別する座標系を中心に構成されています。上記のPOMの例では、プロジェクトの直接の依存関係としてJUnit座標を参照しています。たとえば、Hibernateライブラリを必要とするプロジェクトは、POMでHibernateのプロジェクト座標を宣言するだけです。Mavenは、依存関係とHibernate自体が必要とする依存関係(推移的依存関係と呼ばれます)を自動的にダウンロードし、ユーザーのローカルリポジトリに保存します。Maven 2中央リポジトリは、デフォルトでライブラリの検索に使用されますが、POM内で使用されるリポジトリ(たとえば、企業とプライベートのリポジトリ)を構成できます。
MavenとAntの基本的な違いは、Mavenの設計では、すべてのプロジェクトが特定の構造とサポートされている一連のタスクワークフロー(たとえば、ソース管理からのリソースの取得、プロジェクトのコンパイル、単体テストなど)を持っていると見なしていることです。ほとんどのソフトウェアプロジェクトは事実上これらの操作をサポートしており、実際には明確に定義された構造を持っていますが、Mavenではこの構造と操作の実装の詳細をPOMファイルで定義する必要がしたがって、Mavenは、プロジェクトの定義方法と、すべてのプロジェクトで一般的にサポートされているワークフローのリストに関する規則に依存しています。
中央リポジトリ検索エンジンなどの検索エンジンがあり、さまざまなオープンソースライブラリやフレームワークの座標を見つけるために使用できます。
単一のマシンで開発されたプロジェクトは、ローカルリポジトリを介して相互に依存できます。ローカルリポジトリは、ダウンロードされた依存関係のキャッシュとしても、ローカルに構築されたアーティファクトの集中ストレージの場所としても機能する単純なフォルダ構造です。Mavenコマンドmvn installはプロジェクトをビルドし、そのバイナリをローカルリポジトリに配置します。次に、他のプロジェクトは、POMで座標を指定することにより、このプロジェクトを利用できます。

相互運用性
Javaプログラミング言語を対象とするいくつかの一般的な統合開発環境(IDE)へのアドオンは、MavenとIDEのビルドメカニズムおよびソース編集ツールとの統合を提供し、MavenがIDE内からプロジェクトをコンパイルできるようにします。コードの完了、コンパイラエラーの強調表示など。
Mavenでの開発をサポートする人気のあるIDEの例は次のとおりです。clipse NetBeans IntelliJ IDEA JBuilder
JDeveloper(バージョン11.1.2) MyEclipse VisualStudioコード
これらのアドオンは、POMを編集したり、POMを使用して、IDE内でプロジェクトの依存関係の完全なセットを直接決定したりする機能も提供します。
IDEの組み込み機能の一部は、IDEがコンパイルを実行しなくなると失われます。たとえば、EclipseのJDTには、編集後に単一のJavaソースファイルを再コンパイルする機能が多くのIDEは、Mavenが優先するフォルダーの階層ではなく、フラットなプロジェクトのセットで動作します。これにより、Mavenを使用する場合のIDEでのSCMシステムの使用が複雑になります。

も参照してください
image
 無料のオープンソースソフトウェアポータル ApacheContinuum アパッチゼリー
ハドソン
ジェンキンス
ビルド自動化ソフトウェアのリスト

参考文献
^ 「Mavenリリースノート– Maven3.8.2」。maven.apache.org。
^ “”/ maven2 /のインデックス””。
^ Laugstol、Trygve。「MojoHausネイティブMavenプラグイン」。
^ 「IBiblioリゾルバー| ApacheIvy™」。
^ 「再現可能/検証可能なビルド-ApacheMaven-Apache SoftwareFoundation」。cwiki.apache.org。
^ 「Javaで再現可能なビルド-DZoneJava」。dzone.com。
^ スーパーPOM
^ プンザラン、エドウィン。「ApacheMavenコンパイラプラグイン–はじめに」。
^ Marbaise、Brett Porter Jason van Zyl Dennis Lundberg Olivier Lamy Benson MarguliesKarl-Heinz。「Maven–利用可能なプラグイン」。
^ Amies、Alex; ゾウPX; WongS「クラウド仮想マシンの開発と管理を自動化する」。IBMDeveloperWorks。IBM。
^ ポーター、ブレット。「Maven–ビルドライフサイクルの概要」。
^ 「diet4j-JavaJARをダイエットに配置し、必要に応じてMavenモジュールをロードします」。
^ 「Maven:完全なリファレンス」。ソナタイプ。
^ 中央リポジトリ検索エンジン
^ “”maven.apache.org/eclipse-plugin.html””。
^ 「IntelliJIDEA ::機能」。
^ 「MavenBestPractices-NetBeansWiki」。

参考文献
オブライエン、ティム; etal。「Maven:完全なリファレンス」。Sonatype.com。ソナタイプ。
Maven:決定的なガイド。ソナタイプカンパニー。O’Reilly Media、Inc。2009.p。470. ISBN 9780596551780。
Van Zyl、Jason(2008-10-01)、Maven:Definitive Guide(first ed。)、O’Reilly Media、  pp。468、ISBN 978-0-596-51733-5
「Maven2からのJUnitテストの実行」。JUnit in Action(第2版)。マニング出版物。2011. pp。152–168。ISBN 978-1-935182-02-3。
Mavenビルドのカスタマイズ。Packt。2013. pp。1–250。ISBN 9781783987221。
Apache Maven3をマスターする。Packt。2014.p。298. ISBN 9781783983865。

外部リンク
公式サイト
image   image