English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Maven 构築ライフサイクル

Maven ビルドライフサイクルは、プロジェクトのビルドとリリースのプロセスを定義しています。

典型的な Maven ビルド(build)ライフサイクルは以下の阶段のシーケンスで構成されています:

阶段処理説明
確認 validateプロジェクトを確認しますプロジェクトが正しくてすべての必要情報が利用可能であるかを確認します。
コンパイル compileコンパイルを実行しますソースコードのコンパイルはこの段階で完了します
テスト Testテスト適切なユニットテストフレームワーク(例えばJUnit)を使用してテストを実行します。
パッケージ packageパッケージJARを作成します/WARパッケージが pom.xml で定義されているパッケージに言及されている場合
確認 verify確認統合テストの結果を確認し、品質が基準に達していることを確認します。
インストール installインストールパッケージされたプロジェクトをローカルリポジトリにインストールし、他のプロジェクトで使用するために設定します。
デプロイメント deployデプロイメント最終的なプロジェクトパッケージをリモートリポジトリにコピーし、他の開発者やプロジェクトと共有します。

defaultライフサイクルを完了するために、これらの阶段(上に挙げられていない他のライフサイクル阶段を含む)が順序に従って実行されます。

Maven には以下の3つの標準的なライフサイクルがあります:

  • clean:プロジェクトのクリーンアップ処理

  • default(または build):プロジェクトのデプロイメント処理

  • site:プロジェクトサイトドキュメントの作成処理

ビルド阶段はプラグインターゲットで構成されています

プラグインターゲットは特定のタスクを代表します(ビルド阶段よりも詳細です)、これによりプロジェクトのビルドと管理が助かります。これらのターゲットは複数の阶段にバインドされるか、またはバインドされません。ビルド阶段にバインドされていないターゲットは、直接呼び出しによってビルドライフサイクルの外で実行できます。これらのターゲットの実行順序は、呼び出しターゲットとビルド阶段の順序に依存します。

例えば、以下のコマンドを考えてみましょう:

clean と pakage はビルド阶段、dependency:copy-dependencies はターゲットです

mvn clean dependency:copy-dependencies package

ここでの clean 阶段がまず実行され、その後 dependency:copy-dependencies ターゲットが実行され、最終的に package 阶段が実行されます。

Clean ライフサイクル

mvn post を実行するとき-clean コマンドを実行したとき、Maven は clean ライフサイクルを呼び出し、以下のフェーズを含みます:

  • pre-clean:cleanの前に完了する必要がある作業を実行します

  • clean:前回のビルドで生成されたすべてのファイルを削除します

  • post-clean:cleanの後にすぐに完了する必要がある作業を実行します

mvn clean の clean は上記の clean で、ライフサイクルの1つのフェーズを実行するとき、その前の全てのフェーズが実行されます。つまり、mvn clean を実行すると以下の2つのライフサイクルフェーズが実行されます:

pre-clean、clean

mvn post を実行するとき-clean が指定された場合、以下の3つのライフサイクルフェーズを実行します:

pre-clean、clean、post-clean

clean ライフサイクルのどのフェーズでもターゲットを定義することで、この部分の操作行動を変更できます。

以下の例では、maven-antrun-plugin:run ターゲットを pre に追加します。-clean、clean、そして post-clean フェーズ中です。これにより、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</build/version>
<build>
<plugins>
   <plugin>
   <groupId>org.apache.maven.plugins</groupId/groupId>
   <artifactId>maven</artifactId-antrun-plugin>/artifactId>
   <version>1.1</version>
   <executions>
      <execution>
         <id>id.pre</id-clean</id>
         <phase>pre</phase-clean</phase>
         </goals>
            <goal>run</goal>/goal>
         </goals>
         <configuration>
            <tasks>
               <echo>pre</echo-clean フェーズ</echo>
            </tasks>
         </configuration>
      </execution>
      <execution>
         <id>id.clean</id>
         <phase>clean</phase>
         </goals>
          <goal>run</goal>/goal>
         </goals>
         <configuration>
            <tasks>
               <echo>clean フェーズ</echo>
            </tasks>
         </configuration>
      </execution>
      <execution>
         <id>id.post</id-clean</id>
         <phase>post</phase-clean</phase>
         </goals>
            <goal>run</goal>/goal>
         </goals>
         <configuration>
            <tasks>
               <echo>post</echo-clean フェーズ</echo>
            </tasks>
         </configuration>
      </execution>
   </executions>
   </plugin>
</plugins>
</build>
</project>

今、コマンドコンソールを開き、pom.xml があるディレクトリに移動して、以下の mvn コマンドを実行します。

C:\MVN\project>mvn post-clean

Maven は clean ライフサイクルの全フェーズを処理し、表示を開始します。

[INFO] プロジェクトのスキャン中...
[INFO] ------------------------------------------------------------------
[INFO] 不明名ビルド - com.companyname.projectgroup:project:jar:1.0
[INFO] タスク-segment: [post-clean]
[INFO] ------------------------------------------------------------------
[INFO] [antrun:run {execution: id.pre-clean}]
[INFO] タスクの実行
     [echo] pre-clean フェーズ
[INFO] 実行タスク
[INFO] [clean:clean {execution: default}-clean}]
[INFO] [antrun:run {execution: id.clean}]
[INFO] タスクの実行
     [echo] clean フェーズ
[INFO] 実行タスク
[INFO] [antrun:run {execution: id.post}-clean}]
[INFO] タスクの実行
     [echo] post-clean フェーズ
[INFO] 実行タスク
[INFO] ------------------------------------------------------------------
[INFO] 构築成功
[INFO] ------------------------------------------------------------------
[INFO] 合計時間: < 1 second
[INFO] 終了時: 土曜 Jul 07 13:38:59 IST 2012
[INFO] 最終メモリ: 4M/44M
[INFO] ------------------------------------------------------------------

mvn clean コマンドを変更して pre を表示するように試してみてください。-clean と clean、そして post-clean 関節では何も実行しません。

デフォルト(ビルド)ライフサイクル

これはMavenの主要なライフサイクルで、アプリケーションの構築に使用され、以下のものを含みます。 23 個のステージ:

ライフサイクルステージ説明
validate(確認)プロジェクトが正しくて、すべての必要情報がプロジェクトのビルドプロセスを完了できるかを確認します。
initialize(初期化)ビルド状態を初期化します。例えば、属性値を設定します。
generate-sources(ソースコードの生成)コンパイル段階に含まれるすべてのソースコードを生成します。
process-sources(ソースコードの処理)ソースコードを処理します。例えば、任意の値をフィルタリングします。
generate-resources(リソースファイルの生成)プロジェクトパッケージに含める予定のリソースファイルを作成します。
process-resources(リソースファイルの処理)リソースをターゲットディレクトリにコピーおよび処理し、パッケージ段階の最適な準備をします。
compile(コンパイル)プロジェクトのソースコードをコンパイルします。
process-classes(クラスファイルの処理)コンパイルから生成されたファイルを処理します。例えば、Java classファイルに対するバイトコードの改善および最適化を行います。
generate-test-sources(テストソースコードの生成)コンパイル段階に含まれるすべてのテストソースコードを生成します。
process-test-sources(テストソースコードの処理)テストソースコードを処理します。例えば、任意の値をフィルタリングします。
generate-test-resources(テストリソースファイルの生成)テスト用のリソースファイルを作成します。
process-test-resources(テストリソースファイルの処理)テストリソースをターゲットディレクトリにコピーおよび処理します。
test-compile(テストソースコードのコンパイル)テストソースコードをテストターゲットディレクトリにコンパイルします。
process-test-classes(テストクラスファイルの処理)テストソースコードから生成されたファイルを処理します。
test(テスト)適切なユニットテストフレームワークを使用してテストを実行します(Juintはそのうちの一つです)。
prepare-package(パッケージの準備)実際のパッケージの前に、パッケージの準備に必要な任意の操作を実行します。
package(パッケージ)コンパイル後のコードを配布可能な形式のファイル(JAR、WAR、EARファイルなど)にパッケージします。
pre-integration-test(統合テスト前)統合テストを実行する前に必要なアクションを行います。例えば、必要な環境を構築します。
integration-test(統合テスト)プロジェクトを統合テストを実行できる環境に処理およびデプロイします。
post-integration-test(統合テスト後)統合テストを実行した後に必要なアクションを行います。例えば、統合テスト環境をクリーンアップします。
verify(検証)プロジェクトパッケージが有効で品質基準を満たしているかを確認するための任意のチェックを実行します。
install(インストール)プロジェクトパッケージをローカルリポジトリにインストールし、他のローカルプロジェクトの依存関係として使用することができます。
deploy(デプロイ)最終のプロジェクトパッケージをリモートリポジトリにコピーし、他の開発者やプロジェクトと共有します。

Mavenライフサイクルに関連する重要な概念がいくつか説明される必要があります:

例えばmvn compileなどのMavenコマンドでフェーズが呼び出された場合、そのフェーズ以前およびそのフェーズを含むすべてのフェーズが実行されます。

異なるMavenターゲットは、パッケージの種類(JAR / WAR / EARは、異なるMavenライフサイクルフェーズにバインドされています。

以下の例では、maven-antrun-プラグイン: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</build/version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId/groupId>
<artifactId>maven</artifactId-antrun-plugin>/artifactId>
<version>1.1</version>
<executions>
   <execution>
      <id>id.validate</id>
      <phase>バリデーション</phase>
      </goals>
         <goal>run</goal>/goal>
      </goals>
      <configuration>
         <tasks>
            <echo>バリデーションフェーズ</echo>
         </tasks>
      </configuration>
   </execution>
   <execution>
      <id>id.compile</id>
      <phase>コンパイル</phase>
      </goals>
         <goal>run</goal>/goal>
      </goals>
      <configuration>
         <tasks>
            <echo>コンパイルフェーズ</echo>
         </tasks>
      </configuration>
   </execution>
   <execution>
      <id>id.test</id>
      <phase>テスト</phase>
      </goals>
         <goal>run</goal>/goal>
      </goals>
      <configuration>
         <tasks>
            <echo>テストフェーズ</echo>
         </tasks>
      </configuration>
   </execution>
   <execution>
         <id>id.package</id>
         <phase>パッケージ</phase>
         </goals>
            <goal>run</goal>/goal>
         </goals>
         <configuration>
         <tasks>
            <echo>パッケージフェーズ</echo>
         </tasks>
      </configuration>
   </execution>
   <execution>
      <id>id.deploy</id>
      <phase>デプロイ</phase>
      </goals>
         <goal>run</goal>/goal>
      </goals>
      <configuration>
      <tasks>
         <echo>デプロイフェーズ</echo>
      </tasks>
      </configuration>
   </execution>
</executions>
</plugin>
</plugins>
</build>
</project>

現在コマンドコントロールタブを開き、pom.xmlがあるディレクトリに移動して以下のmvnコマンドを実行します。

C:\MVN\project>mvn compile

Mavenは、コンパイルフェーズまでのビルドライフサイクルの各フェーズを処理し表示します。

[INFO] プロジェクトのスキャン中...
[INFO] ------------------------------------------------------------------
[INFO] 不明名ビルド - com.companyname.projectgroup:project:jar:1.0
[INFO] タスク-セグメント: [compile]
[INFO] ------------------------------------------------------------------
[INFO] [antrun:run {execution: id.validate}]
[INFO] タスクの実行
     [echo] バリデーションフェーズ
[INFO] 実行タスク
[INFO] [リソース:resources {execution: default}-resources}]
[WARNING] プラットフォームエンコーディング (Cp1252 実際にはフィルタリングされたリソースをコピーするために、
つまり、ビルドはプラットフォーム依存です!
[INFO] 存在しないリソースディレクトリ C:\MVN\project\src\main\resources をスキップ
[INFO] [コンパイラ:compile {execution: default}-compile}]
[INFO] コンパイルするものはありません - すべてのクラスは最新の状態です
[INFO] [antrun:run {execution: id.compile}]
[INFO] タスクの実行
     [echo] compile phase
[INFO] 実行タスク
[INFO] ------------------------------------------------------------------
[INFO] 构築成功
[INFO] ------------------------------------------------------------------
[INFO] 合計時間: 2 秒
[INFO] 終了時: 土曜 Jul 07 20:18:25 IST 2012
[INFO] 最終メモリ: 7M/64M
[INFO] ------------------------------------------------------------------

コマンドライン呼び出し

開発環境では、以下のコマンドを使用して、ローカルリポジトリにプロジェクトをビルドおよびインストールします

mvn install

このコマンドは、install 関数を実行する前に、デフォルトのライフサイクルの段階(validate、compile、packageなど)を順番に実行します。私たちは最後の段階、ここでは install を呼び出す必要があります。

ビルド環境では、以下の呼び出しを使用して、共有リポジトリに純粋にプロジェクトをビルドおよびデプロイします

mvn clean deploy

このコマンドは、複数のモジュールがある場合にも使用できます。つまり、複数のサブプロジェクトを持つプロジェクトの場合、Mavenは各サブプロジェクトで clean コマンドを実行し、その後 deploy コマンドを実行します。

Site ライフサイクル

Maven Site プラグインは、新しいレポートドキュメントの作成、サイトのデプロイなどに一般的に使用されます。

  • pre-site:生成されたサイトドキュメントの前に行う必要がある作業を実行します

  • site:プロジェクトのサイトドキュメントを生成します

  • post-site:生成されたサイトドキュメントの後に行う必要がある作業を実行し、デプロイの準備をします

  • site-deploy:生成されたサイトドキュメントを特定のサーバーにデプロイします

よく使用されるのは site 関数と site-deploy 関数を、Maven サイトの生成と配布を行う強力な機能として使用します。これはManagerが特に好きで、ドキュメントや統計データが自動生成され、とても見栄えが良くなります。 以下の例では、maven-antrun-plugin:run ターゲットを Site ライフサイクルのすべての段階に追加しました。これにより、ライフサイクルのすべてのテキスト情報を表示できます。

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</build/version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId/groupId>
<artifactId>maven</artifactId-antrun-plugin>/artifactId>
<version>1.1</version>
   <executions>
      <execution>
         <id>id.pre</id-site</phase/id>
         <phase>pre</phase-site</phase/phase>
         </goals>
            <goal>run</goal>/goal>
         </goals>
         <configuration>
            <tasks>
               <echo>pre</echo-site フェーズ</execution/echo>
            </tasks>
         </configuration>
      </execution>
      <execution>
         <id>id.site</id/id>
         <phase>site</phase/phase>
         </goals>
         <goal>run</goal>/goal>
         </goals>
         <configuration>
            <tasks>
               <echo>site フェーズ</echo/echo>
            </tasks>
         </configuration>
      </execution>
      <execution>
         <id>id.post</id-site</phase/id>
         <phase>post</phase-site</phase/phase>
         </goals>
            <goal>run</goal>/goal>
         </goals>
         <configuration>
            <tasks>
               <echo>post</echo-site フェーズ</execution/echo>
            </tasks>
         </configuration>
      </execution>
      <execution>
         <id>id.site</id-deploy</phase/id>
         <phase>site</phase-deploy</phase/phase>
         </goals>
            <goal>run</goal>/goal>
         </goals>
         <configuration>
            <tasks>
               <echo>site-deploy フェーズ</echo>
            </tasks>
         </configuration>
      </execution>
   </executions>
</plugin>
</plugins>
</build>
</project>

現在コマンドコントロールタブを開き、pom.xmlがあるディレクトリに移動して以下のmvnコマンドを実行します。

C:\MVN\project>mvn site

Mavenはsiteフェーズまでのsiteライフサイクルの各フェーズを処理し、表示します。

[INFO] プロジェクトのスキャン中...
[INFO] ------------------------------------------------------------------
[INFO] 不明名ビルド - com.companyname.projectgroup:project:jar:1.0
[INFO] タスク-segment: [site]
[INFO] ------------------------------------------------------------------
[INFO] [antrun:run {execution: id.pre-site}]
[INFO] タスクの実行
     [echo] pre-site フェーズ
[INFO] 実行タスク
[INFO] [site:site {execution: default-site}]
[INFO] 「About」レポート生成中。
[INFO] 「Issue Tracking」レポート生成中。
[INFO] 「プロジェクトチーム」レポートの生成。
[INFO] 「依存関係」レポートの生成。
[INFO] 「プロジェクトプラグイン」レポートの生成。
[INFO] 「連続統合」レポートの生成。
[INFO] 「ソースリポジトリ」レポートの生成。
[INFO] 「プロジェクトライセンス」レポートの生成。
[INFO] 「メーリングリスト」レポートの生成。
[INFO] 「プラグイン管理」レポートの生成。
[INFO] 「プロジェクト要約」レポートの生成。
[INFO] [antrun:run {execution: id.site}]
[INFO] タスクの実行
     [echo] サイトフェーズ
[INFO] 実行タスク
[INFO] ------------------------------------------------------------------
[INFO] 构築成功
[INFO] ------------------------------------------------------------------
[INFO] 合計時間: 3 秒
[INFO] 終了時: 土曜 Jul 07 15:25:10 IST 2012
[INFO] 最終メモリ: 24M/149M
[INFO] ------------------------------------------------------------------```