364

Mavenの目標とフェーズの違い/関係は何ですか? それらは互いにどのように関連していますか?

4

8 に答える 8

280

目標は、目標が実行される順序を決定するのに役立つフェーズで実行されます。これを最もよく理解するには、デフォルトでどの目標がどのフェーズで実行されるかを示すデフォルトの Maven ライフサイクル バインディングを確認することです。compileフェーズ ゴールは常にフェーズ ゴールの前に実行され、フェーズtestゴールは常にフェーズ ゴールの前に実行さpackageれます。

混乱の一部は、Maven を実行するときに目標またはフェーズを指定できるという事実によって悪化します。フェーズを指定すると、Maven は指定したフェーズまでのすべてのフェーズを順番に実行します (たとえば、パッケージを指定すると、最初にコンパイル フェーズ、次にテスト フェーズ、最後にパッケージ フェーズを実行します)。そのフェーズに関連付けられているすべての目標を実行します。

Maven ビルド ファイルでプラグイン実行を作成し、ゴールのみを指定すると、そのゴールが特定のデフォルト フェーズにバインドされます。たとえば、jaxb:xjcゴールはデフォルトでgenerate-resourcesフェーズにバインドされます。ただし、実行を指定すると、そのゴールのフェーズも明示的に指定できます。

Maven を実行するときにゴールを指定すると、そのゴールだけが実行されます。つまり、ゴールを指定すると、コードを jar にパッケージ化するゴールjar:jarのみが実行されます。jar:jar以前に compile ゴールを実行したり、コンパイルされたコードを他の方法で準備したりしていない場合、これはおそらく失敗する可能性があります。

于 2013-04-25T03:20:47.443 に答える
225

ライフ サイクルは、一連の名前付きフェーズです。
フェーズは順次実行されます。フェーズの実行は、前のすべてのフェーズを実行することを意味します。

プラグインは、MOJO ( Maven Old Java O object )とも呼ばれる目標のコレクションです。 類推: プラグインはクラスであり、ゴールはクラス内のメソッドです。

Maven はBuild Life Cyclesの中心的な概念に基づいています。各ビルド ライフ サイクル内にはビルド フェーズがあり、各ビルド フェーズ内にはビルド ゴールがあります。

ビルド フェーズまたはビルド ゴールのいずれかを実行できます。ビルド フェーズを実行するとき、そのビルド フェーズ内のすべてのビルド ゴールを実行します。ビルドの目標は、1 つ以上のビルド フェーズに割り当てられます。ビルドゴールを直接実行することもできます。

3 つの主要な組み込みビルド ライフ サイクルがあります。

  1. デフォルト
  2. 掃除
  3. サイト

各ビルド ライフサイクルはフェーズで構成されています

たとえば、defaultライフサイクルは次のビルド フェーズで構成されます。

◾validate - validate the project is correct and all necessary information is available
◾compile - compile the source code of the project
◾test - test the compiled source code using a suitable unit testing framework. These tests should not require the code be packaged or deployed
◾package - take the compiled code and package it in its distributable format, such as a JAR.
◾integration-test - process and deploy the package if necessary into an environment where integration tests can be run
◾verify - run any checks to verify the package is valid and meets quality criteria
◾install - install the package into the local repository, for use as a dependency in other projects locally
◾deploy - done in an integration or release environment, copies the final package to the remote repository for sharing with other developers and projects.

したがって、上記のフェーズを実行するには、1 つのコマンドを呼び出すだけです。

mvn <phase> { Ex: mvn install }

上記のコマンドの場合、最初のフェーズから開始して、すべてのフェーズが「インストール」フェーズまで順番に実行されます。mvn次のように、目標またはフェーズ (または複数の目標または複数のフェーズ) を実行できます。

mvn clean install plugin:goal  

maven-plugin-pluginただし、プラグインの参照に使用するプレフィックスをカスタマイズする場合は、プラグインの POM の構成パラメーターを介してプレフィックスを直接指定できます。

ビルド フェーズはプラグインのゴールで構成されています

Maven の機能のほとんどはプラグインにあります。プラグインは、次の構文を使用して実行できる 一連の目標を提供します。

 mvn [plugin-name]:[goal-name]

たとえば、Java プロジェクトは、 を実行することにより、コンパイラ プラグインの compile-goal でコンパイルできますmvn compiler:compile

ビルド ライフサイクルは、目標の実行に順序を与えるために使用できる名前付きフェーズのリストです。

プラグインによって提供される目標は、ライフサイクルのさまざまな段階に関連付けることができます。たとえば、デフォルトでは、ゴールは フェーズcompiler:compile関連付けられていますが、ゴールはフェーズに関連付けられています。次のコマンドを検討してください。 compile surefire:testtest

mvn test

上記のコマンドが実行されると、Maven はそのフェーズまでの各フェーズに関連付けられたすべてのゴールを実行しtestます。このような場合、Mavenはフェーズにresources:resources関連付けられたゴールを実行し、次にというように、最終的にゴールを実行するまで続けます。process-resourcescompiler:compilesurefire:test

ただし、ビルド フェーズはビルド ライフサイクルの特定のステップを担当しますが、それらの責任を実行する方法は異なる場合があります。これは、これらのビルド フェーズにバインドされたプラグインの目標を宣言することによって行われます。

プラグインの目標は、プロジェクトの構築と管理に貢献する特定のタスク (ビルド フェーズより細かい) を表します。0 個以上のビルド フェーズにバインドできます。どのビルド フェーズにもバインドされていないゴールは、直接呼び出しによってビルド ライフサイクルの外部で実行できます。実行の順序は、ゴールとビルド フェーズが呼び出される順序によって異なります。たとえば、次のコマンドを考えてみましょう。および引数はビルド フェーズであり、cleanは(プラグインの) ゴールです。packagedependency:copy-dependencies

mvn clean dependency:copy-dependencies package

これが実行される場合、clean最初にフェーズが実行され (つまり、クリーン ライフサイクルの前のすべてのフェーズとcleanフェーズ自体が実行されます)、次にdependency:copy-dependenciesゴールが実行されてから、最終的にpackageフェーズ (およびその前のすべてのビルド フェーズ) が実行されます。デフォルトのライフサイクル)。

さらに、ゴールが 1 つ以上のビルド フェーズにバインドされている場合、そのゴールはそれらすべてのフェーズで呼び出されます。

さらに、ビルド フェーズには、0 個以上のゴールをバインドすることもできます。ビルド フェーズにゴールがバインドされていない場合、そのビルド フェーズは実行されません。ただし、1 つ以上のゴールがバインドされている場合は、それらすべてのゴールを実行します。

ビルトイン ライフサイクル バインディング
一部のフェーズには、デフォルトでゴールがバインドされています。デフォルトのライフサイクルでは、これらのバインディングはパッケージング値に依存します。

Maven アーキテクチャ:

ここに画像の説明を入力

参考1
参考2

Maven ライフサイクル マッピングの Eclipse サンプル

Maven ライフサイクル マッピングの Eclipse サンプル

于 2015-09-24T10:46:43.773 に答える
54

定義はMaven サイトのページIntroduction to the Build Lifecycleで詳しく説明されていますが、要約してみました。

Maven は、ビルド プロセスの 4 つの項目を定義します。

  1. ライフサイクル

    3 つの組み込みライフサイクル (ビルド ライフサイクルとも呼ばれます): defaultcleansite. (ライフサイクル リファレンス)

  2. 段階

    各ライフサイクルはフェーズで構成されています。たとえば、defaultライフサイクルcompileは 、testpackageinstallなどです。

  3. プラグイン

    1 つ以上の目標を提供する成果物。

    パッケージ タイプ ( jarwarなど) に基づいて、プラグインの目標はデフォルトでフェーズにバインドされます。(組み込みのライフサイクル バインディング)

  4. ゴール

    実行されるタスク (アクション)。プラグインは 1 つ以上の目標を持つことができます。

    POM でプラグインを構成するときは、1 つ以上の目標を指定する必要があります。さらに、プラグインにデフォルトのフェーズが定義されていない場合は、指定された目標をフェーズにバインドできます。

Maven は以下で呼び出すことができます。

  1. フェーズ (例: cleanpackage)
  2. <plugin-prefix>:<goal>(例dependency:copy-dependencies)
  3. <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>(例org.apache.maven.plugins:maven-compiler-plugin:3.7.0:compile)

いずれかまたはすべての 1 つまたは複数の組み合わせを使用します。例:

mvn clean dependency:copy-dependencies package
于 2014-10-12T03:20:54.497 に答える
53

選択された答えは素晴らしいですが、それでもトピックに小さなものを追加したいと思います. イラストです。

さまざまなフェーズがさまざまなプラグインにどのようにバインドされているか、およびそれらのプラグインが公開する目標を明確に示しています。

それでは、次のようなものを実行するケースを調べてみましょうmvn compile:

  • コンパイルゴールでコンパイラプラグインを実行するフェーズです
  • コンパイラ プラグインにはさまざまな目的があります。mvn compile特定の目標であるコンパイル目標にマップされているためです。
  • 走るのと同じだmvn compiler:compile

したがって、フェーズはプラグインのゴールで構成されます

ここに画像の説明を入力

参照へのリンク

于 2015-08-24T13:45:39.987 に答える
2

フェーズと目標を持つ Maven 作業用語。

フェーズ: Maven フェーズは、2 つまたは 3 つの目標に関連付けられた一連のアクションです。

例:- mvn clean を実行した場合

これは、目標 mvn clean:clean を実行するフェーズです。

ゴール: フェーズに制限された Maven ゴール

参考までに http://books.sonatype.com/mvnref-book/reference/lifecycle-sect-structure.html

于 2014-09-16T09:33:27.100 に答える
2

次の 3 つの組み込みビルド ライフサイクルがあります。

  • デフォルト
  • 掃除
  • サイト

ライフサイクルのデフォルト-> [validate、initialize、generate-sources、process-sources、generate-resources、process-resources、compile、process-classes、generate-test-sources、process-test-sources、generate-test-resources、process -test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy]

ライフサイクル クリーン-> [プレクリーン、クリーン、ポストクリーン]

ライフサイクル サイト-> [プレサイト、サイト、ポストサイト、サイト展開]

フローはシーケンシャルです。たとえば、デフォルトのライフサイクルでは、 validateから始まり、初期化など...

mvnつまり、デバッグモードを有効にすることでライフサイクルを確認できます。mvn -X <your_goal>

于 2018-08-14T19:05:34.037 に答える