Maven-build-life-cycle
Maven-ライフサイクルの構築
ビルドライフサイクルとは何ですか?
ビルドライフサイクルは、明確に定義された一連のフェーズであり、目標が実行される順序を定義します。 ここで、フェーズはライフサイクルの段階を表します。 例として、典型的な* Mavenビルドライフサイクル*は、次の一連のフェーズで構成されています。
Phase | Handles | Description |
---|---|---|
prepare-resources | resource copying | Resource copying can be customized in this phase. |
validate | Validating the information | Validates if the project is correct and if all necessary information is available. |
compile | compilation | Source code compilation is done in this phase. |
Test | Testing | Tests the compiled source code suitable for testing framework. |
package | packaging | This phase creates the JAR/WAR package as mentioned in the packaging in POM.xml. |
install | installation | This phase installs the package in local/remote maven repository. |
Deploy | Deploying | Copies the final package to the remote repository. |
ゴール*を登録する *pre および post フェーズが常にあり、特定のフェーズの前または後に実行する必要があります。
Mavenはプロジェクトの構築を開始すると、定義されたフェーズのシーケンスをステップ実行し、各フェーズに登録されている目標を実行します。
Mavenには次の3つの標準ライフサイクルがあります-
- クリーン
- デフォルト(またはビルド)
- site
- 目標*は、プロジェクトの構築と管理に貢献する特定のタスクを表します。 ゼロ以上のビルドフェーズにバインドできます。 ビルドフェーズにバインドされていない目標は、直接呼び出しによってビルドライフサイクル外で実行できます。
実行の順序は、目標とビルドフェーズが呼び出される順序によって異なります。 たとえば、次のコマンドを検討してください。 clean および package 引数はビルドフェーズであり、 dependency:copy-dependencies は目標です。
mvn clean dependency:copy-dependencies package
ここでは、最初に_clean_フェーズが実行され、次に* dependency:copy-dependenciesゴール*が実行され、最後に_package_フェーズが実行されます。
クリーンライフサイクル
_mvn post-clean_コマンドを実行すると、Mavenは次のフェーズで構成されるクリーンライフサイクルを呼び出します。
- プレクリーン
- クリーン *ポストクリーン
Mavenクリーンゴール(clean:clean)は、クリーンライフサイクルの_clean_フェーズにバインドされています。* clean:cleangoal *は、ビルドディレクトリを削除することにより、ビルドの出力を削除します。 したがって、_mvn clean_コマンドを実行すると、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.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] ------------------------------------------------------------------
*pre-clean* およびcleanを表示する *mvn clean* コマンドのチューニングを試すことができます。 *post-clean* フェーズでは何も実行されません。
デフォルト(またはビルド)ライフサイクル
これはMavenの主要なライフサイクルであり、アプリケーションの構築に使用されます。 次の21のフェーズがあります。
Sr.No. | Lifecycle Phase & Description |
---|---|
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ライフサイクルに関連するいくつかの重要な概念があります-
- mvn compile など、Mavenコマンドを介してフェーズが呼び出されると、そのフェーズまでのフェーズのみが実行されます。
- パッケージのタイプ(JAR/WAR/EAR)に応じて、Mavenライフサイクルのさまざまなフェーズに異なるMavenゴールがバインドされます。
次の例では、Buildライフサイクルのいくつかのフェーズに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 Siteプラグインは通常、レポートを作成したり、サイトを展開したりするための新しいドキュメントを作成するために使用されます。 次のフェーズがあります-
- プレサイト
- site
- ポストサイト
- サイト展開
次の例では、サイトライフサイクルのすべての段階に 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] ------------------------------------------------------------------