2

スタック オーバーフローの Maven の目標、フェーズについて読んでいたときに、次のような 2 つのリンクを見つけました。

Maven を実行すると、目標またはフェーズを指定できます。

Maven の目標とフェーズの違い/関係は何ですか?

と他の人は言います:

ライフサイクル フェーズ自体を呼び出すことはできませんが、ライフサイクル フェーズにバインドされているプラ​​グインのゴールを呼び出すことはできます。

特定の Maven フェーズの実行

どちらが正しいですか?それとも私はそれを理解していませんか?

また、ライフサイクル/フェーズ/目標を実行するMavenの簡単な例を教えてください。また、Maven は、フェーズまたは目標を実行する必要があることを知っていますか? たとえば、私が言うときmvn install、それはinstall段階ですか、それとも目標ですか?

4

2 に答える 2

8

ボンビア・ボー

Maven ビルドのライフ サイクルは、一連のフェーズを持つ豪華な食事のようなものだと考えてください。

  • スターター (リソース)
  • メイン (コンパイル)
  • デザート(パッケージ)
  • コーヒー (インストール)
  • digestif (デプロイ)

目標は、その段階で提供される実際の食事です。

  • 前菜:ガスパチョ
  • メイン:ステーキ。グレービー; フライドポテト
  • デザート:ティラミス
  • コーヒー:カプチーノ

このアナロジーでは:

  • pom.xml ファイルは、チョーク ボードに書かれた今日のスペシャルに相当します。
  • コマンドラインで呼び出すことmvnは、ウェイターに注文することと同じです
  • 1 つのフェーズ (ステーキ + グレービー + フライドポテト) に複数の食品/目標をバインドできます。

家のデフォルトが気に入ったら、最初の N コースを持ってくるように彼に言うことができます。

"I'll take the 2 course meal"
$ mvn compile

メイン コース (ガスパチョの後にステーキ + グレービー + フライド ポテト) まですべてが揃っています。

1 つのゴールを呼び出すことは、オーダーをカスタマイズすることと同じです。

"I'll take a Cobb salad plus the 2 course meal"
$ mvn javadoc:javadoc compile

その目標をメニューに永続的に追加したい場合は、それを pom ファイルに追加します。これで、次の呼び出しに戻ります。

$ mvn compile

その結果、ガスパチョ + コブ、ステーキ + グレービー + フライドポテトが続きます。

目標をフェーズにバインドすることに関する最後のポイント。

デフォルトでは、各目標は特定のフェーズで実行されます (通常、コブ サラダがスターターとして提供されます)。ただし、ウェイターに伝えるようなもので、フェーズ バインディングをオーバーライドできます。"I'll have a Cobb salad, but bring it at the same time as the main"

これにより、目標とフェーズの背後にある直感が明確になることを願っています。

于 2014-10-30T06:54:18.700 に答える