Maven-ライフサイクルの構築
ビルドライフサイクルとは何ですか?
ビルドライフサイクルは、明確に定義された一連のフェーズであり、目標が実行される順序を定義します。ここで、フェーズはライフサイクルの段階を表します。例として、典型的なMaven Build Lifecycle 次の一連のフェーズで構成されます。
段階 | ハンドル | 説明 |
---|---|---|
準備-リソース | リソースのコピー | このフェーズでは、リソースのコピーをカスタマイズできます。 |
検証 | 情報の検証 | プロジェクトが正しいかどうか、および必要なすべての情報が利用可能かどうかを検証します。 |
コンパイル | コンパイル | ソースコードのコンパイルはこのフェーズで行われます。 |
テスト | テスト | フレームワークのテストに適したコンパイル済みソースコードをテストします。 |
パッケージ | 包装 | このフェーズでは、POM.xmlのパッケージに記載されているようにJAR / WARパッケージを作成します。 |
インストール | インストール | このフェーズでは、パッケージをローカル/リモートのMavenリポジトリにインストールします。 |
デプロイ | 展開 | 最終パッケージをリモートリポジトリにコピーします。 |
常にあります pre そして post 登録するフェーズ goals、特定のフェーズの前または後に実行する必要があります。
Mavenがプロジェクトの構築を開始すると、定義された一連のフェーズをステップ実行し、各フェーズに登録されている目標を実行します。
Mavenには次の3つの標準ライフサイクルがあります-
- clean
- デフォルト(またはビルド)
- site
A goalプロジェクトの構築と管理に寄与する特定のタスクを表します。ゼロ個以上のビルドフェーズにバインドされる場合があります。ビルドフェーズにバインドされていない目標は、直接呼び出すことでビルドライフサイクルの外で実行できます。
実行の順序は、ゴールとビルドフェーズが呼び出される順序によって異なります。たとえば、次のコマンドについて考えてみます。ザ・clean そして package 引数はビルドフェーズですが、 dependency:copy-dependencies 目標です。
mvn clean dependency:copy-dependencies package
ここでは、クリーンフェーズが最初に実行され、次にdependency:copy-dependencies goal、最後にパッケージフェーズが実行されます。
クリーンなライフサイクル
mvn post-cleanコマンドを実行すると、Mavenは次のフェーズで構成されるクリーンライフサイクルを呼び出します。
- pre-clean
- clean
- post-clean
Mavenのクリーンゴール(clean:clean)は、クリーンライフサイクルのクリーンフェーズにバインドされています。そのclean:cleangoalビルドディレクトリを削除して、ビルドの出力を削除します。したがって、mvn cleanコマンドが実行されると、Mavenはビルドディレクトリを削除します。
クリーンライフサイクルの上記のフェーズのいずれかで目標に言及することで、この動作をカスタマイズできます。
次の例では、maven-antrun-plugin:runゴールをpre-clean、clean、およびpost-cleanフェーズにアタッチします。これにより、クリーンなライフサイクルのフェーズを表示するテキストメッセージをエコーできます。
C:\ MVN \ projectフォルダーにpom.xmlを作成しました。
<project xmlns = "http://maven.apache.org/POM/4.0.0"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.companyname.projectgroup</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<id>id.pre-clean</id>
<phase>pre-clean</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>pre-clean phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.clean</id>
<phase>clean</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>clean phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.post-clean</id>
<phase>post-clean</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>post-clean phase</echo>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
コマンドコンソールを開き、pom.xmlを含むフォルダーに移動して、以下を実行します。 mvn コマンド。
C:\MVN\project>mvn post-clean
Mavenは、クリーンライフサイクルのすべてのフェーズの処理と表示を開始します。
[INFO] Scanning for projects...
[INFO] -----------------------------------------------------------------
-
[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0
[INFO] task-segment: [post-clean]
[INFO] ------------------------------------------------------------------
[INFO] [antrun:run {execution: id.pre-clean}]
[INFO] Executing tasks
[echo] pre-clean phase
[INFO] Executed tasks
[INFO] [clean:clean {execution: default-clean}]
[INFO] [antrun:run {execution: id.clean}]
[INFO] Executing tasks
[echo] clean phase
[INFO] Executed tasks
[INFO] [antrun:run {execution: id.post-clean}]
[INFO] Executing tasks
[echo] post-clean phase
[INFO] Executed tasks
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------
[INFO] Total time: > 1 second
[INFO] Finished at: Sat Jul 07 13:38:59 IST 2012
[INFO] Final Memory: 4M/44M
[INFO] ------------------------------------------------------------------
チューニングしてみてください mvn clean コマンド、表示されます pre-cleanそしてきれい。何も実行されませんpost-clean 段階。
デフォルト(またはビルド)ライフサイクル
これはMavenの主要なライフサイクルであり、アプリケーションの構築に使用されます。以下の21フェーズがあります。
シニア番号 | ライフサイクルフェーズと説明 |
---|---|
1 | validate プロジェクトが正しく、ビルドプロセスを完了するために必要なすべての情報が利用可能かどうかを検証します。 |
2 | initialize セットプロパティなどのビルド状態を初期化します。 |
3 | generate-sources コンパイルフェーズに含めるソースコードを生成します。 |
4 | process-sources ソースコードを処理します。たとえば、任意の値をフィルタリングします。 |
5 | generate-resources パッケージに含まれるリソースを生成します。 |
6 | process-resources リソースをコピーして宛先ディレクトリに処理し、パッケージ化フェーズの準備をします。 |
7 | compile プロジェクトのソースコードをコンパイルします。 |
8 | process-classes 生成されたファイルをコンパイルから後処理します。たとえば、Javaクラスでバイトコードの拡張/最適化を行います。 |
9 | generate-test-sources コンパイルフェーズに含めるテストソースコードを生成します。 |
10 | process-test-sources テストソースコードを処理します。たとえば、任意の値をフィルタリングします。 |
11 | test-compile テストソースコードをテスト宛先ディレクトリにコンパイルします。 |
12 | process-test-classes テストコードファイルのコンパイルから生成されたファイルを処理します。 |
13 | test 適切な単体テストフレームワークを使用してテストを実行します(JUnitはその1つです)。 |
14 | prepare-package 実際に梱包する前に、梱包の準備に必要な操作を行ってください。 |
15 | package コンパイルされたコードを取得し、JAR、WAR、またはEARファイルなどの配布可能な形式でパッケージ化します。 |
16 | pre-integration-test 統合テストを実行する前に必要なアクションを実行します。たとえば、必要な環境を設定します。 |
17 | integration-test 必要に応じてパッケージを処理し、統合テストを実行できる環境にデプロイします。 |
18 | post-integration-test 統合テストの実行後に必要なアクションを実行します。たとえば、環境のクリーンアップ。 |
19 | verify 検査を実行して、パッケージが有効であり、品質基準を満たしていることを確認します。 |
20 | install パッケージをローカルリポジトリにインストールします。これは、他のプロジェクトの依存関係としてローカルで使用できます。 |
21 | deploy 他の開発者やプロジェクトと共有するために、最終パッケージをリモートリポジトリにコピーします。 |
言及する価値のあるMavenライフサイクルに関連する重要な概念はほとんどありません-
たとえば、Mavenコマンドを介してフェーズが呼び出された場合 mvn compile、そのフェーズまでのフェーズのみが実行されます。
パッケージのタイプ(JAR / WAR / EAR)に応じて、さまざまなMavenの目標がMavenライフサイクルのさまざまなフェーズにバインドされます。
次の例では、ビルドライフサイクルのいくつかのフェーズにmaven-antrun-plugin:runゴールをアタッチします。これにより、ライフサイクルのフェーズを表示するテキストメッセージをエコーできます。
C:\ MVN \ projectフォルダーのpom.xmlを更新しました。
<project xmlns = "http://maven.apache.org/POM/4.0.0"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.companyname.projectgroup</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<id>id.validate</id>
<phase>validate</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>validate phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.compile</id>
<phase>compile</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>compile phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.test</id>
<phase>test</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>test phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.package</id>
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>package phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.deploy</id>
<phase>deploy</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>deploy phase</echo>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
コマンドコンソールを開き、pom.xmlを含むフォルダーに移動して、以下を実行します。 mvn コマンド。
C:\MVN\project>mvn compile
Mavenは処理を開始し、コンパイルフェーズまでのビルドライフサイクルのフェーズを表示します。
[INFO] Scanning for projects...
[INFO] -----------------------------------------------------------------
-
[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0
[INFO] task-segment: [compile]
[INFO] -----------------------------------------------------------------
-
[INFO] [antrun:run {execution: id.validate}]
[INFO] Executing tasks
[echo] validate phase
[INFO] Executed tasks
[INFO] [resources:resources {execution: default-resources}]
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered
resources,
i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory
C:\MVN\project\src\main\resources
[INFO] [compiler:compile {execution: default-compile}]
[INFO] Nothing to compile - all classes are up to date
[INFO] [antrun:run {execution: id.compile}]
[INFO] Executing tasks
[echo] compile phase
[INFO] Executed tasks
[INFO] -----------------------------------------------------------------
-
[INFO] BUILD SUCCESSFUL
[INFO] -----------------------------------------------------------------
-
[INFO] Total time: 2 seconds
[INFO] Finished at: Sat Jul 07 20:18:25 IST 2012
[INFO] Final Memory: 7M/64M
[INFO] -----------------------------------------------------------------
-
サイトのライフサイクル
Mavenサイトプラグインは通常、レポートの作成、サイトのデプロイなどのための新しいドキュメントを作成するために使用されます。次のフェーズがあります。
- pre-site
- site
- post-site
- site-deploy
次の例では、添付します maven-antrun-plugin:runサイトライフサイクルのすべてのフェーズの目標。これにより、ライフサイクルのフェーズを表示するテキストメッセージをエコーできます。
C:\ MVN \ projectフォルダーのpom.xmlを更新しました。
<project xmlns = "http://maven.apache.org/POM/4.0.0"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.companyname.projectgroup</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<id>id.pre-site</id>
<phase>pre-site</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>pre-site phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.site</id>
<phase>site</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>site phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.post-site</id>
<phase>post-site</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>post-site phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.site-deploy</id>
<phase>site-deploy</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>site-deploy phase</echo>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
コマンドコンソールを開き、pom.xmlを含むフォルダーに移動して、以下を実行します。 mvn コマンド。
C:\MVN\project>mvn site
Mavenは、サイトライフサイクルのフェーズからサイトフェーズまでの処理と表示を開始します。
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------
[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0
[INFO] task-segment: [site]
[INFO] ------------------------------------------------------------------
[INFO] [antrun:run {execution: id.pre-site}]
[INFO] Executing tasks
[echo] pre-site phase
[INFO] Executed tasks
[INFO] [site:site {execution: default-site}]
[INFO] Generating "About" report.
[INFO] Generating "Issue Tracking" report.
[INFO] Generating "Project Team" report.
[INFO] Generating "Dependencies" report.
[INFO] Generating "Project Plugins" report.
[INFO] Generating "Continuous Integration" report.
[INFO] Generating "Source Repository" report.
[INFO] Generating "Project License" report.
[INFO] Generating "Mailing Lists" report.
[INFO] Generating "Plugin Management" report.
[INFO] Generating "Project Summary" report.
[INFO] [antrun:run {execution: id.site}]
[INFO] Executing tasks
[echo] site phase
[INFO] Executed tasks
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------
[INFO] Total time: 3 seconds
[INFO] Finished at: Sat Jul 07 15:25:10 IST 2012
[INFO] Final Memory: 24M/149M
[INFO] ------------------------------------------------------------------