ローカルリポジトリへの「mvn deploy」と「mvn install」の違いは何ですか?


95

私のチームは、Apacheを使用して開発サーバーから共有される内部チームmavenリポジトリを使用しています。また、Continuum CIサーバーを同じマシンで実行します。ContinuumのMavenビルドは、「インストール」ゴールで実行され、最終的なアーティファクトを共有ディレクトリに直接コピーします。

問題は、mvn installデプロイ目標(mvn-deployプラグイン)の使用と共有リポジトリへのファイルの追加の違いは何ですか?

使用mvn deployすると追加の設定が面倒になるように思えますが、共有リポジトリにファイルをインストールすることは、mavenの内部動作に関連する何らかの理由で悪い考えであるとどこかで読んだことがあります。

アップデート:私は間の機能の違いを取得するdeployinstall、Mavenリポジトリでどのファイルが作成されるかという点で、私は実際には低レベルの詳細にもっと興味があります。

回答:


166

ケン、いい質問だ。違いについては、The Definitive Guideでより明確にする必要があります。「インストール」と「デプロイ」は、ビルドで2つの異なる目的を果たします。「インストール」とは、ローカルリポジトリにアーティファクトをインストールするプロセスを指します。「デプロイ」とは、アーティファクトをリモートリポジトリにデプロイするプロセスを指します。

例:

  1. 私のマシンで大きなマルチモジュールプロジェクトを実行すると、通常は「mvn install」を実行します。これにより、生成されたすべてのバイナリソフトウェアアーティファクト(通常はJAR)がローカルリポジトリにインストールされます。次に、ビルドで個々のモジュールをビルドすると、Mavenがローカルリポジトリから依存関係を取得します。

  2. スナップショットまたはリリースをデプロイするときが来たら、「mvn deploy」を実行します。これを実行すると、ファイルがリモートリポジトリまたはサーバーにデプロイされます。通常、Nexusなどのリポジトリマネージャーに展開します

「デプロイ」を実行するには追加の設定が必要になることは事実であり、POMにdistributionManagementセクションを指定する必要があります。


@ティムだから正確には何の利点mvn deployですか?そもそも必要だった追加の構成にはどのようなメリットがありますか?
オタク

4
Deployは、アーティファクトをリモートサーバーにデプロイするように設計されています。インストールとはまったく異なるユースケースです。
Tim O'Brien、

17

Mavenのドキュメントから、音それだけの違いだようにそのあなたにパッケージをインストールリポジトリ:

  • install-パッケージをローカルリポジトリにインストールし、ローカルで他のプロジェクトの依存関係として使用します
  • デプロイ-統合環境またはリリース環境で行われ、最終パッケージをリモートリポジトリにコピーして、他の開発者やプロジェクトと共有します。

たぶん、CIサーバーへの「インストール」がそれをローカルリポジトリにインストールするという混乱があるかもしれません。それがユーザーとしてあなたが共有しているものですか?


4

"matt b"にはそれがありますが、具体的には、 "install"ゴールはビルドされたターゲットをファイルシステムのローカルリポジトリにコピーします。現在、グループ全体を対象としたものではない、プロジェクト全体の小さな変更に役立ちます。

「デプロイ」ゴールは、作業が完了したときに共有リポジトリにアップロードし、プロジェクトにそれを必要とする他のユーザーが共有できるようにします。

あなたのケースでは、CIのローカルリポジトリ共有リポジトリであるため、デプロイメントの管理を容易にするために「インストール」が使用されているようです。CIが別のボックスにあった場合、「デプロイ」目標を使用する必要があります。

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