99

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

mvn install問題は、デプロイ ゴール (mvn-deploy プラグイン) を使用して共有リポジトリにファイルを追加する場合と使用する場合の違いは何ですか?

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

更新: と の間の機能上の違いを取得しdeployますinstall。私は実際には、maven リポジトリで作成されるファイルの観点から、低レベルの詳細にもっと興味があります。

4

3 に答える 3

179

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

例:

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

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

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

于 2009-03-29T05:41:32.703 に答える
19

Maven docs から、パッケージをインストールするリポジトリ違いのように聞こえます:

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

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

于 2008-10-16T16:05:17.097 に答える
5

「mattb」は正しいですが、具体的には、「インストール」の目標は、ビルドされたターゲットをファイルシステムのローカルリポジトリにコピーします。現在グループ全体を対象としていないプロジェクト全体の小さな変更に役立ちます。

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

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

于 2008-10-16T20:34:42.043 に答える