web-dev-qa-db-ja.com

MvnインストールまたはMvnパッケージ

私はMavenを初めて使用します。MyEclipseで構成されたJavaベースのWebプロジェクトがあります。
今、Javaファイルを変更した場合、Run as -> Mvn installまたはMvn packageを実行する必要がありますか?

116
user2192023

from http://maven.Apache.org/guides/getting-started/maven-in-five-minutes.html

package:コンパイルされたコードを取得し、JARなどの配布可能な形式でパッケージ化します。

install:他のプロジェクトでローカルに依存関係として使用するために、パッケージをローカルリポジトリにインストールします

したがって、あなたの質問に対する答えは、それをあなたのローカルリポジトリにインストールするかどうかに依存します。パッケージは、目標フェーズスタックの上位にあるため、インストールも実行されます。

144
ezcodr

mvn installは、最もよく使用されるオプションです。
mvn packageはめったに使用されません。mavenビルドプロセスに関する問題をデバッグしている場合のみです。

参照: http://maven.Apache.org/guides/introduction/introduction-to-the-lifecycle.html

mvn packageはjarファイルのみを作成することに注意してください。
mvn installは、他のコードがそれらのjarに依存している場合、適切な場所にjar(およびクラスなど)ファイルをインストールしますand

私は通常mvn clean installを行います。これにより、targetディレクトリが削除され、その場所にあるすべてのjarが再作成されます。
クリーンは、邪魔になることがある不要なものや削除されたものに役立ちます。
その後、(時々)デバッグするのは、常に新鮮な状態で開始するだけです。

30
Johan

ライフサイクルリファレンス から、installはプロジェクトの統合テスト、packageしません。

生成されたアーティファクトを本当にインストールする必要がない場合は、少なくともverifyを使用します。

8
dna

また、プロジェクトが相互に依存する複数のモジュールで構成されている場合は、「パッケージ」ではなく「インストール」を使用する必要があります。そうしないと、ビルドが失敗し、インストールコマンドを使用するとモジュールAがパッケージ化されますローカルリポジトリにデプロイし、モジュールBが依存関係としてモジュールAを必要とする場合、ローカルリポジトリからモジュールAにアクセスできます。

5
Mr.Q

notを使用している場合remoteリポジトリ(アーティファクトなど)を使用している場合は、プレーンな古いものを使用します:mvn clean install

かなり古いトピックですが、あなたのチーム間でjarを共有するために独自のリポジトリ(例えば、アーティファクト付き)を実行する場合、あなたは使用したいかもしれません

mvn clean deploy

代わりに。

これにより、継続的インテグレーションサーバーは、すべての依存関係がリモートリポジトリに正しくプッシュされることを確認できます。見つからなかった場合、mvnはCIローカルm2リポジトリでそれを見つけることができません。

4
user1853859

package-コンパイルされたコードを取得し、JARファイルやWARファイルなどの配布可能な形式でパッケージ化します。 install-パッケージをローカルリポジトリにインストールし、他のプロジェクトの依存関係としてローカルで使用します

2

properの方法はmvn packageです。ビルドのコア部分で正しく処理した場合、ローカルリポジトリにパッケージをインストールする必要はありません。

さらに、Travisを使用する場合、独自のプロジェクトにパッケージを使用する場合、$HOME.m2/repositoryに影響しないため、依存関係を「キャッシュ」できます。

実際には、mvn siteを実行しようとする場合でも、通常は前にmvn installを実行する必要があります。 siteのバグが多すぎるか、メンテナンスが不十分なプラグインが多数あります。

1

Javaファイルを変更した後に何を達成しようとしているかによって異なります。 Mavenプロセスをテストするまで、何もする必要はありません。 Eclipse/MyEclipseは必要なものをビルドし、プロジェクト内の適切な場所に出力を配置します。また、mavenで明示的に何かをする必要なく、それを実行またはデプロイできます(たとえば、Webプロジェクトの場合)。最後に、mavenリポジトリにプロジェクトをインストールするには、mavenのインストールを行う必要があります。また、MyEclipseが自動的に実行しない他のMaven目標を実行することもできます。

私が言うように、それはあなたが何をしたいかによって異なります。

0
Tony Weddle