「mvn clean package」と「mvn clean install」はどう違うのですか?


277

正確にとの違いは何ですかmvn clean packageとはmvn clean install?これらのコマンドを両方実行すると、どちらも同じように動作するようです。



3
1つのパッケージ(ターゲットでビルド)およびインストール(パッケージでリポジトリに配置)でこのバージョンを別のモジュールで使用する場合は、後で行う必要があります。
Peter Lawrey、2013年

3
おそらくこれを再開する必要がありますか?答えることは完全に可能であり、答えることは難しいとは思いませんでした。また、誰かがmavenの初心者であれば、2つのフェーズがどのように同じように見えるかを簡単に確認できます。曖昧さを少なくするために編集します。
Daniel Kaplan

回答:


371

まあ、どちらもきれいになります。つまり、ターゲットフォルダーが削除されます。本当の質問は、パッケージとインストールの違いは何ですか?

packageコードをコンパイルしてパッケージ化します。たとえば、プロジェクトがjarであるとpomが言った場合、それをパッケージ化してターゲットディレクトリのどこかに置くと(デフォルトでは)、jarが作成されます。

installコンパイルしてパッケージ化しますが、パッケージをローカルリポジトリに配置します。これにより、他のプロジェクトがそれを参照してローカルリポジトリから取得できるようになります。

ドキュメンテーション


なぜmvnはmvnパッケージより速くインストールするのですか?
lostintranslation 2017

9
@SharadHolaniビルドが増分であるため。mvn clean installよりも速くありませんmvn package
OrangeDog 2017

私のプロジェクトの場合、ファットjarをビルドするmvnパッケージassembly:singleは、mvn installよりも時間がかかります。パッケージ化してインストールし、両方で同等のファットjarをビルドしますか?
lostintranslation 2017

1
@RakeshYadavはい、そうです
Daniel Kaplan

116

cleanが行うこと(両方のコマンドに共通)-以前のビルドで生成されたすべてのファイルを削除します


コマンドパッケージインストールの違いについては、まずMavenプロジェクトのライフサイクルを理解する必要があります


これらはMavenのデフォルトのライフサイクルフェーズです

  • 検証 -プロジェクトが正しく、必要なすべての情報が利用可能であることを検証します
  • compile-プロジェクトのソースコードをコンパイルします
  • test-適切なユニットテストフレームワークを使用して、コンパイルされたソースコードをテストします。これらのテストでは、コードをパッケージ化またはデプロイする必要はありません
  • パッケージ -コンパイルされたコードを受け取り、JARなどの配布可能な形式でパッケージ化します。
  • 検証 -統合テストの結果をチェックして、品質基準が満たされていることを確認します
  • install-パッケージをローカルリポジトリにインストールし、ローカルで他のプロジェクトの依存関係として使用します
  • デプロイ -ビルド環境で行われ、他の開発者やプロジェクトと共有するために、最終パッケージをリモートリポジトリにコピーします。

Mavenの仕組みは、いずれかのライフサイクルフェーズでコマンドを実行すると、コマンド自体を実行する前に、デフォルトの各ライフサイクルフェーズを順番に実行します。

実行の順序

検証>>コンパイル>>テスト(オプション)>>パッケージ>>検証>>インストール>>デプロイ

したがって、コマンドmvn packageを実行すると、packageまでのすべてのライフサイクルフェーズのコマンドが実行されます

検証>>コンパイル>>テスト(オプション)>>パッケージ

そして、mvn installと同様に、パッケージも含むinstallまでのすべてのライフサイクルフェーズのコマンドを実行します

検証>>コンパイル>>テスト(オプション)>>パッケージ>>検証>>インストール


つまり、効果的には、installコマンドは、packageコマンドが実行するすべてのことを実行します(パッケージをローカルリポジトリにインストールし、ローカルで他のプロジェクトの依存関係として使用します)。

出典:Mavenライフサイクルリファレンス


1
これは、承認済みの回答としてマークする必要があります。これは、OPがMavenライフサイクルのさまざまなフェーズを理解し、mvn installにmvnパッケージが含まれているが、その逆は含まれていない理由を理解するのに役立ちます。
Jasmeet Singh

1
一言で言えば、Maven、素晴らしい!
CodeSlave

19

パッケージは、POMファイルごとにJar / warを生成します。 installは、生成されたjarファイルを、他の依存関係がある場合はローカルリポジトリにインストールします。

インストール段階がパッケージ段階の後に来る


最初のパッケージ化が行われ、次にそれらのパッケージ(jar / war)がインストールされます。
Abdul Gafoor 2017年

1
「インストールフェーズパッケージフェーズに従います」。現在の言い方は逆です。「後に続く」は「後」を意味します。
Charles Wood

11

パッケージとインストールは、Mavenビルドライフサイクルのさまざまなフェーズです。パッケージフェーズは、その前にすべてのフェーズを実行し、プロジェクトをjarとしてパッケージ化することで停止します。同様に、インストールフェーズでは、以前のすべてのフェーズが実行され、最後にプロジェクトがローカルにインストールされ、他の依存プロジェクトに使用されます。

Mavenビルドのライフサイクルを理解するには、次のリンクにアクセスしてくださいhttps://ayolajayamaha.blogspot.in/2014/05/difference-between-mvn-clean-install.html


1
「他の依存プロジェクトのプロジェクトをローカルにインストールする」とはどういう意味ですか
Arun Gowda

2
@ArunGowdaこれは、Mavenのインストール時にシステムに作成される.m2に、パッケージ化するプロジェクトとともに追加され、依存関係として他のプロジェクトで使用できることを意味します。
JAVA

画像は1000語ですが、だれでも図を入手できますか?

@MrCholo mvn installはjar / warをmavenリポジトリに配置します。Mavenのすべての依存関係が保存される場所。通常は〜/ .m2
brt

6

packageパッケージ追加されますjarwar、あなたに target私たちがターゲットフォルダ(使用を空にしたとき、フォルダ、我々はそれを確認することができます mvn clean)してから実行しますmvn package
installすべての事でしょうpackage、さらにそれがパッケージに追加されますないjarwarだけでなく、ローカルリポジトリ内に。.m2フォルダで確認できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.