2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Mavenのライフサイクル、フェーズ、プラグイン、ゴールの関係

Posted at

ここでは、Mavenビルドツールのコマンドの意味を理解するうえで重要となる、ライフサイクル、フェーズ、プラグイン、ゴールの関係についてまとめます。
なお、執筆にあたっては以下の公式リファレンスを参考にしているので、項目ごとに詳細を知りたい場合は併せて参照をお願いします。
https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

ライフサイクルとフェーズ

まず、ライフサイクルは以下の3種類があります。

  • Default
  • Clean
  • Site

そして、それぞれのライフサイクルは複数のフェーズで成り立っています。
例えば、mvn compileなどでよく使うcompileというのはフェーズの一種で、これはDefaultライフサイクルの中にあります。

コマンドでフェーズを指定して実行したときは、そのフェーズを含むライフサイクルの、始めのフェーズから、指定したフェーズまでが順次実行されます。
つまり、もしmvn installコマンドを叩いたときは、installフェーズだけが実行されるのではなく、その前のcompileフェーズやtestフェーズも実行されるということです。

プラグインとゴール

ここまでの説明だけだと、Mavenが提供するコンパイルやテストなどの各機能はフェーズとして定義されているように感じるかもしれませんが、まだ続きがあります。
Mavenにはプラグインという概念があって、プラグインの中には1つ以上のゴールが含まれます。
この関係は、ものすごくざっくり言うと、便利な機能をまとめたサービス(プラグイン)があって、その中の実際の各機能に相当するのがゴールといった感じです。
そして、Mavenの各機能はすべてこのプラグインゴールとして定義されています。

例えば、Compilerというプラグインがありますが、この中にはcompileとtestCompileという2つのゴールがあります。
compileはメインコードのソースコードをコンパイルし、testCompileはテストコードのほうをコンパイルする機能ですね。

ライフサイクルのフェーズと、プラグインのゴールの関係

「Mavenの各機能はすべてこのプラグインのゴールとして定義されています。」と言いました。
ではなぜ、先述のmvn installなどのコマンドでは、フェーズを指定するだけで機能の実行ができるのでしょうか。
それは、ライフサイクルのフェーズに、プラグインのゴールが紐づけられているからです。
これは、デフォルトで紐づけられているものもあるし、pomファイル上で設定することもできます。
例えば、Cleanライフサイクルのcleanフェーズには、cleanプラグインのcleanゴールが初めから紐づいています。

コマンドを叩くときは、フェーズではなく、プラグインのゴールを直接指定することもできます。
フェーズを指定したときとは異なり、この場合は、ライフサイクル内の順番を無視して該当のゴール(機能)だけを単独で実行できます。

コマンドで見た時の違い

最後に、フェーズを指定するときと、プラグインのゴールを直接指定するときの違いをコマンドで確認しておきます。

mvn compileとしたときは、compileフェーズを指定しています。
つまり、Defaultライフサイクルの初めから、compileフェーズが指し示す機能までが順次実行されます。

mvn compiler:compileとしたときは、compilerプラグインのcompileゴールを直接指定しています。(このように、プラグイン名:ゴール名という書き方をします。)
この場合は、ライフサイクルに関係なく、compilerプラグインのcompileゴールの機能のみが単独で実行されます。

まとめ

いかがだったでしょうか。
普段叩いているコマンドの意味を理解するうえで、少しでもお役に立てれば幸いです

※このアカウントで発信する内容はあくまで私個人の意見であり、現在所属する会社の公式見解を示すものではありません。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?