Mavenシリーズ5.Mavenライフサイクル
5.Mavenライフサイクル
ターゲットとプラグイン
ワークピースを生成するコンストラクションプロセスは、通常、正常に完了するにはいくつかのステップとタスクが必要です.これらのタスクの例には、ソースコードのコンパイル、ユニットテストの実行、ワークのパッケージングが含まれます.Mavenはターゲットの概念を用いてこのような粒度タスクを表す.
1つの目標が何なのかをよりよく理解するために、例を見てみましょう.インベントリ5-1には、c:apressgswm-bookchapter 5gswmのgswmプロジェクトコードで実行されるコンパイルターゲットが表示されます.名前の通り、ターゲットコンパイルソースコードをコンパイルします.コンパイル先ID src/main/javaのJavaクラスHelloWorld.JAva、コンパイルし、コンパイルしたクラスファイルをtargetclassesフォルダの下に置きます.
リスト5-1.mavenコンパイルターゲット
C:\apress\gswm-book\chapter5\gswm>mvn compiler:compile
Mavenのターゲットは、本質的に1つ以上のターゲットの集合であるプラグインにパッケージされています.インベントリ5-1では、コンパイラはターゲットコンパイルを提供するプラグインである.リスト5−2はcleanというきれいなターゲットを紹介している.前述したように、ターゲットフォルダには、Mavenによって生成された一時ファイルとワークピースが保存されます.ターゲットフォルダが膨大になったり、キャッシュされたファイルがフォルダから消去されたりすることがあります.ターゲットフォルダとそのすべてのコンテンツを削除しようとするため、クリーンなターゲットは完全に実現されました.
リスト5-2.Mavenクリーンターゲット
なお、リスト5−2のコマンドのclean:clean接尾辞.前のコロン(:)をクリアすると、クリーンなプラグインが表示され、コロンに従うとクリーンなターゲットが表示されます.コマンド・ラインでターゲットを実行するには、次の構文が必要であることが明らかになりました.
mvn plugin_identifier:goal_identifier
pomを使用できます.xmlのプラグイン部分は、プラグインとその動作を構成します.プロジェクトをJava 1.6でコンパイルしなければならない場合を考慮します.バージョン3.0から、MavenコンパイラプラグインはJava 1.5に基づいてコードをコンパイルします.だからpomでxmlファイルでは、リスト5-3に示すように、このプラグインの動作を変更します.
リスト5-3.プラグイン要素はpom.xmlファイル
mvnコンパイラ:compileコマンドを実行すると、生成されたクラスファイルはJavaバージョン1.6になります.
注意pom.xmlの要素にはfinalNameと呼ばれる非常に有用なサブ要素があります.デフォルトでは、Mavenが生成したワークの名前は<> - << project_version>>フォーマット.ただし、artifactIdを変更せずに生成されたワークの名前を変更する必要がある場合があります.finalName要素をnewと宣言できます.name finalName>で実装します.ライフサイクルとフェーズMavenは、ワークピースを構築、テスト、配布する際に、定義された構築ライフサイクルに従います.ライフサイクルは、生成されたアーティファクトに関係なく、同じ順序で実行される一連のフェーズまたはステップを構成します.Mavenはライフサイクルのステップをフェーズと呼びます.Mavenには、デフォルトの3つのライフサイクルが組み込まれています.このライフサイクルは、Mavenプロジェクトのコンパイル、パッケージング、導入を処理します.
≪パージ|Purge|ldap≫:このライフサイクル処理では、ターゲット・ディレクトリから一時ファイルと生成されたワークピースを削除します.≪サイト|Site|emdw≫:このライフサイクルでは、ドキュメントとサイト生成の生成が処理されます.クリーンアップライフサイクルは、コマンドmvn cleanを使用してcleanフェーズを実行するだけで、ターゲットフォルダをクリーンアップできます.ライフサイクルとそのフェーズの構築をよりよく理解するには、デフォルトのライフサイクルに関連するいくつかのフェーズを見てみましょう.検証:プロジェクトが正しく、すべての依存項目がダウンロードされ、使用可能であることを確認するためにチェックを実行します.コンパイル:ソースコードをコンパイルします.テスト:フレームワークを使用してユニットテストを実行します.この手順では、アプリケーションをパッケージする必要はありません.パッケージ:コンパイルされたコードを、JARまたはWARなどの配布可能なフォーマットにアセンブリします.インストール:パッケージされたアーカイブをローカル・リポジトリにインストールします.このアーカイブは、マシン上で実行される任意のプロジェクトで使用できるようになりました.≪デプロイ|Deployment|emdw≫:構築されたアーカイブをリモート・リポジトリにプッシュし、他のチームおよびチーム・メンバーが使用できます.デフォルトのライフサイクルでは、フェーズの順序が明確に定義されているため、コマンドmvn packageを実行してワークピースを生成できます.Mavenは、要求されたフェーズの前にすべてのフェーズを自動的に実行します.提供される例では、Mavenは、コンパイルやテストなどのパッケージフェーズの実行前にフェーズを実行します.これは、開発者と構成マネージャが少数のコマンドを学習し、使用する必要があることを意味します.各段階で多くのタスクを実行する必要があります.これを達成するために、各フェーズは1つ以上のターゲットに関連付けられます.フェーズは、これらのタスクを関連するターゲットに簡単に委任します.【図5】ライフサイクル、ステージ、ターゲット、およびプラグイン間の関連付けを示す図である.図5-1.ライフサイクル、フェーズ、ターゲットとプラグインの関連pom.xmlファイルの要素は、他の構成を必要とせずに、各フェーズに正しいターゲットを自動的に割り当てます.これがCoCのメリットであることを覚えておいてください.パッケージ要素に値jarが含まれている場合、パッケージフェーズはjarプラグインのjarターゲットにバインドされます.同様に、WARワークについては、pom.xmlはwarプラグインでwarターゲットにパッケージをバインドします.スキップテストは前述したように、パッケージフェーズを実行すると、テストフェーズも実行され、すべてのユニットテストが実行されます.テストフェーズに障害がある場合は、構築に失敗します.これは必要な行為です.ただし、たとえば、残されたプロジェクトを処理するときに、テストの実行をスキップしてプロジェクトを正常に構築する場合があります.mavenを使ってもいいです.test.skipプロパティを実装します.以下に、この属性を使用する例を示す:mvn package-Dmaven.test.skip=trueプラグインMavenのプラグインを開発するのは簡単です.このセクションでは、プラグイン開発の味を与えるHelloPluginの例を紹介します.前述したように、プラグインはターゲットの集合にすぎません.そのため、プラグインの開発について話しているとき、私たちは基本的に開発目標について話しています.Javaでは、これらのターゲットはMOJOを使用して実装され、Mavenの古いJavaオブジェクトを表し、Javaの一般的な古いJavaオブジェクト(PO JO)に似ています.図5−2に示すように、gswm−pluginというMaven Javaプロジェクトを作成することによって、このプラグインの開発を開始する.C:apressgswm-bookchapter 5フォルダでgswm-pluginプロジェクトを起動してこのプロジェクトを作成しています.
図5-2.Mavenプロジェクトのプラグイン開発注意本章では、プラグインプロジェクトを手動で作成します.Mavenはmavan-archetype-mojoを提供し、プラグインの開発を開始します.6章ではMavenプロトタイプについて学習する. pom.xmlファイルの内容はリスト5-4に示す.パッケージタイプはmaven-pluginであることに注意してください.プラグイン開発に必要なmaven-plugin-api依存項目を追加しました.リスト5-4.pom.xmlはプラグインapi依存性を有する
開発プロセスの次のステップはMOJOの作成です.コード5-5はHelloMojoのコードを示している.ご覧のように、実現は簡単です.ログインスタンスを使用して、出力をコンソールに記録します.このコードの最も重要な部分は実際にJava注釈部分:@goal helloです.Javadocラベル@goalを使用して、このターゲットの名前をhelloと宣言します.このメタデータは、@MojoなどのJava 5コメントを使用して提供することもできます.しかし、Apache Mavenのサイト(http://maven.apache.org/plugin-tools/maven-plugin-plugin/examples/using-annotations.html)で議論したpom.xmlファイルの変更.
リスト5-5.HelloMojo Javaクラス
この手順の最後のステップは、Mavenリポジトリにプラグインをインストールすることです.ディレクトリのルートディレクトリの下でmvn installコマンドを実行すると、コードリスト5-6に示すような出力が得られます.
リスト5-6.Mavenインストールコマンド
C:\apress\gswm-book\chapter5\gswm-plugin>mvn install
このプラグインの使用を開始できます.ターゲットを実行する構文はmvn pluginId:goalIdであることを覚えておいてください.コードリスト5-7には、このプラグインが実行されていることが示されています.コンソールのHello Maven Pluginテキストに注意してください.
リスト5-7.Helloプラグインの実行
まとめ
Mavenはプラグインベースのアーキテクチャを使用して、機能を簡単に拡張できます.各プラグインは、ソースコードのコンパイルやテストの実行などのタスクを実行するために使用できる1つ以上のターゲットのセットです.Mavenはターゲットをステージにバインドします.相は、通常、構築ライフサイクルの一部としてシーケンスで実行されます.プラグインの作成に関する基礎知識も学びました.次の章では、プロトタイプについて説明し、マルチモジュールプロジェクトについて説明します.
ターゲットとプラグイン
ワークピースを生成するコンストラクションプロセスは、通常、正常に完了するにはいくつかのステップとタスクが必要です.これらのタスクの例には、ソースコードのコンパイル、ユニットテストの実行、ワークのパッケージングが含まれます.Mavenはターゲットの概念を用いてこのような粒度タスクを表す.
1つの目標が何なのかをよりよく理解するために、例を見てみましょう.インベントリ5-1には、c:apressgswm-bookchapter 5gswmのgswmプロジェクトコードで実行されるコンパイルターゲットが表示されます.名前の通り、ターゲットコンパイルソースコードをコンパイルします.コンパイル先ID src/main/javaのJavaクラスHelloWorld.JAva、コンパイルし、コンパイルしたクラスファイルをtargetclassesフォルダの下に置きます.
リスト5-1.mavenコンパイルターゲット
C:\apress\gswm-book\chapter5\gswm>mvn compiler:compile
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Getting Started with Maven 1.0.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-compiler-plugin:2.5.1:compile (default-cli) @ gswm ---
[WARNING] File encoding has not been set, using platform encoding Cp1252, i.e. build is platform dependent!
[INFO] Compiling 1 source file to C:\apress\gswm-book\chapter5\gswm\target\classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.197s
[INFO] Finished at: Mon Oct 13 22:11:42 MDT 2014
[INFO] Final Memory: 7M/18M
[INFO] ------------------------------------------------------------------------
Mavenのターゲットは、本質的に1つ以上のターゲットの集合であるプラグインにパッケージされています.インベントリ5-1では、コンパイラはターゲットコンパイルを提供するプラグインである.リスト5−2はcleanというきれいなターゲットを紹介している.前述したように、ターゲットフォルダには、Mavenによって生成された一時ファイルとワークピースが保存されます.ターゲットフォルダが膨大になったり、キャッシュされたファイルがフォルダから消去されたりすることがあります.ターゲットフォルダとそのすべてのコンテンツを削除しようとするため、クリーンなターゲットは完全に実現されました.
リスト5-2.Mavenクリーンターゲット
C:\apress\gswm-book\chapter5\gswm>mvn clean:clean
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Getting Started with Maven 1.0.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-cli) @ gswm ---
[INFO] Deleting C:\apress\gswm-book\chapter5\gswm\target
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.233s
[INFO] Finished at: Mon Oct 13 22:14:49 MDT 2014
[INFO] Final Memory: 3M/15M
[INFO] ------------------------------------------------------------------------
なお、リスト5−2のコマンドのclean:clean接尾辞.前のコロン(:)をクリアすると、クリーンなプラグインが表示され、コロンに従うとクリーンなターゲットが表示されます.コマンド・ラインでターゲットを実行するには、次の構文が必要であることが明らかになりました.
mvn plugin_identifier:goal_identifier
pomを使用できます.xmlのプラグイン部分は、プラグインとその動作を構成します.プロジェクトをJava 1.6でコンパイルしなければならない場合を考慮します.バージョン3.0から、MavenコンパイラプラグインはJava 1.5に基づいてコードをコンパイルします.だからpomでxmlファイルでは、リスト5-3に示すように、このプラグインの動作を変更します.
リスト5-3.プラグイン要素はpom.xmlファイル
4.0.0
org.apache.maven.plugins
maven-compiler-plugin
3.1
1.6
1.6
mvnコンパイラ:compileコマンドを実行すると、生成されたクラスファイルはJavaバージョン1.6になります.
注意pom.xmlの要素にはfinalNameと呼ばれる非常に有用なサブ要素があります.デフォルトでは、Mavenが生成したワークの名前は<
≪パージ|Purge|ldap≫:このライフサイクル処理では、ターゲット・ディレクトリから一時ファイルと生成されたワークピースを削除します.≪サイト|Site|emdw≫:このライフサイクルでは、ドキュメントとサイト生成の生成が処理されます.クリーンアップライフサイクルは、コマンドmvn cleanを使用してcleanフェーズを実行するだけで、ターゲットフォルダをクリーンアップできます.ライフサイクルとそのフェーズの構築をよりよく理解するには、デフォルトのライフサイクルに関連するいくつかのフェーズを見てみましょう.検証:プロジェクトが正しく、すべての依存項目がダウンロードされ、使用可能であることを確認するためにチェックを実行します.コンパイル:ソースコードをコンパイルします.テスト:フレームワークを使用してユニットテストを実行します.この手順では、アプリケーションをパッケージする必要はありません.パッケージ:コンパイルされたコードを、JARまたはWARなどの配布可能なフォーマットにアセンブリします.インストール:パッケージされたアーカイブをローカル・リポジトリにインストールします.このアーカイブは、マシン上で実行される任意のプロジェクトで使用できるようになりました.≪デプロイ|Deployment|emdw≫:構築されたアーカイブをリモート・リポジトリにプッシュし、他のチームおよびチーム・メンバーが使用できます.デフォルトのライフサイクルでは、フェーズの順序が明確に定義されているため、コマンドmvn packageを実行してワークピースを生成できます.Mavenは、要求されたフェーズの前にすべてのフェーズを自動的に実行します.提供される例では、Mavenは、コンパイルやテストなどのパッケージフェーズの実行前にフェーズを実行します.これは、開発者と構成マネージャが少数のコマンドを学習し、使用する必要があることを意味します.各段階で多くのタスクを実行する必要があります.これを達成するために、各フェーズは1つ以上のターゲットに関連付けられます.フェーズは、これらのタスクを関連するターゲットに簡単に委任します.【図5】ライフサイクル、ステージ、ターゲット、およびプラグイン間の関連付けを示す図である.図5-1.ライフサイクル、フェーズ、ターゲットとプラグインの関連pom.xmlファイルの要素は、他の構成を必要とせずに、各フェーズに正しいターゲットを自動的に割り当てます.これがCoCのメリットであることを覚えておいてください.パッケージ要素に値jarが含まれている場合、パッケージフェーズはjarプラグインのjarターゲットにバインドされます.同様に、WARワークについては、pom.xmlはwarプラグインでwarターゲットにパッケージをバインドします.スキップテストは前述したように、パッケージフェーズを実行すると、テストフェーズも実行され、すべてのユニットテストが実行されます.テストフェーズに障害がある場合は、構築に失敗します.これは必要な行為です.ただし、たとえば、残されたプロジェクトを処理するときに、テストの実行をスキップしてプロジェクトを正常に構築する場合があります.mavenを使ってもいいです.test.skipプロパティを実装します.以下に、この属性を使用する例を示す:mvn package-Dmaven.test.skip=trueプラグインMavenのプラグインを開発するのは簡単です.このセクションでは、プラグイン開発の味を与えるHelloPluginの例を紹介します.前述したように、プラグインはターゲットの集合にすぎません.そのため、プラグインの開発について話しているとき、私たちは基本的に開発目標について話しています.Javaでは、これらのターゲットはMOJOを使用して実装され、Mavenの古いJavaオブジェクトを表し、Javaの一般的な古いJavaオブジェクト(PO JO)に似ています.図5−2に示すように、gswm−pluginというMaven Javaプロジェクトを作成することによって、このプラグインの開発を開始する.C:apressgswm-bookchapter 5フォルダでgswm-pluginプロジェクトを起動してこのプロジェクトを作成しています.
図5-2.Mavenプロジェクトのプラグイン開発注意本章では、プラグインプロジェクトを手動で作成します.Mavenはmavan-archetype-mojoを提供し、プラグインの開発を開始します.6章ではMavenプロトタイプについて学習する. pom.xmlファイルの内容はリスト5-4に示す.パッケージタイプはmaven-pluginであることに注意してください.プラグイン開発に必要なmaven-plugin-api依存項目を追加しました.リスト5-4.pom.xmlはプラグインapi依存性を有する
4.0.0
com.apress.plugins
gswm-plugin
1.0.0
maven-plugin
Simple Hello Plugin
org.apache.maven
maven-plugin-api
3.2.3
開発プロセスの次のステップはMOJOの作成です.コード5-5はHelloMojoのコードを示している.ご覧のように、実現は簡単です.ログインスタンスを使用して、出力をコンソールに記録します.このコードの最も重要な部分は実際にJava注釈部分:@goal helloです.Javadocラベル@goalを使用して、このターゲットの名前をhelloと宣言します.このメタデータは、@MojoなどのJava 5コメントを使用して提供することもできます.しかし、Apache Mavenのサイト(http://maven.apache.org/plugin-tools/maven-plugin-plugin/examples/using-annotations.html)で議論したpom.xmlファイルの変更.
リスト5-5.HelloMojo Javaクラス
package com.apress.plugins;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
/** * * @goal hello */public class HelloMojo extends AbstractMojo
{ public void execute() throws MojoExecutionException, MojoFailureException
{ getLog().info("Hello Maven Plugin");
}
}
この手順の最後のステップは、Mavenリポジトリにプラグインをインストールすることです.ディレクトリのルートディレクトリの下でmvn installコマンドを実行すると、コードリスト5-6に示すような出力が得られます.
リスト5-6.Mavenインストールコマンド
C:\apress\gswm-book\chapter5\gswm-plugin>mvn install
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Simple Hello Plugin 1.0.0
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-plugin-plugin:3.2:descriptor (default-descriptor) @ gswm-plugin ---
[INFO] Applying mojo extractor for language: java-annotations
[INFO] Mojo extractor for language: java-annotations found 0 mojo descriptors.
[INFO] Applying mojo extractor for language: java
[INFO] Mojo extractor for language: java found 1 mojo descriptors.
[INFO] Applying mojo extractor for language: bsh
[INFO] Mojo extractor for language: bsh found 0 mojo descriptors.
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ gswm-plugin ---
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory C:\apress\gswm-book\chapter5\gswm-plugin\src\main\resources
[INFO]
[INFO] --- maven-compiler-plugin:2.5.1:compile (default-compile) @ gswm-plugin -----------------------------------------------
[INFO] Building jar: C:\apress\gswm-book\chapter5\gswm-plugin\target\gswm-plugin-1.0.0.jar
[INFO]
[INFO] --- maven-plugin-plugin:3.2:addPluginArtifactMetadata (default-addPluginArtifactMetadata) @ gswm-plugin ---
[INFO]
[INFO] --- maven-install-plugin:2.4:install (default-install) @ gswm-plugin ---
[INFO] Installing C:\apress\gswm-book\chapter5\gswm-plugin\target\gswm-plugin-1.0.0.jar to C:\Users\<>\.m2\repository\com\apress\plugins\gswm-plugin\1.0.0\gswm-plugin-1.0.0.jar
[INFO] Installing C:\apress\gswm-book\chapter5\gswm-plugin\pom.xml to C:\Users\<>\.m2\repository\com\apress\plugins\gswm-plugin\1.0.0\gswm-plugin-1.0.0.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.788s
[INFO] Finished at: Mon Oct 13 22:29:55 MDT 2014
[INFO] Final Memory: 13M/32M
[INFO] ------------------------------------------------------------------------
このプラグインの使用を開始できます.ターゲットを実行する構文はmvn pluginId:goalIdであることを覚えておいてください.コードリスト5-7には、このプラグインが実行されていることが示されています.コンソールのHello Maven Pluginテキストに注意してください.
リスト5-7.Helloプラグインの実行
C:\apress\gswm-book\chapter5\gswm-plugin>mvn com.apress.plugins:gswm-plugin:hello
[INFO] Scanning for projects...
[INFO]
[INFO] ----------------------------------------------------------
[INFO] Building Simple Hello Plugin 1.0.0
[INFO] ----------------------------------------------------------
[INFO] --- gswm-plugin:1.0.0:hello (default-cli) @ gswm-plugin ---
[INFO] Hello Maven Plugin
[INFO] ----------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ----------------------------------------------------------
[INFO] Total time: 0.583s
[INFO] Finished at: Mon Oct 13 22:32:55 MDT 2014
[INFO] Final Memory: 4M/15M
[INFO] ----------------------------------------------------------
まとめ
Mavenはプラグインベースのアーキテクチャを使用して、機能を簡単に拡張できます.各プラグインは、ソースコードのコンパイルやテストの実行などのタスクを実行するために使用できる1つ以上のターゲットのセットです.Mavenはターゲットをステージにバインドします.相は、通常、構築ライフサイクルの一部としてシーケンスで実行されます.プラグインの作成に関する基礎知識も学びました.次の章では、プロトタイプについて説明し、マルチモジュールプロジェクトについて説明します.