2017-03-06 5 views
0

私は正常に動作するMavenプロジェクトを持っています。MavenはローカルのMavenリポジトリ内の手動でパッチされたjarファイルを上書きしますか?

問題をトリアージするために、私は手動でjarにパッチを適用してデバッグログを追加し、それをローカルのMavenリポジトリディレクトリにコピーしました。デバッグを追加するためにjarファイルを後で変更し、より「公式」なので、「mvn install:install-file」を実行しました。

私は座標を全く変更しなかったことに注意してください(アーティファクトは不変であることがわかっていますが、pom.xmlを変更したくありませんでした)。

私の質問は、(もしあれば)Mavenがこのパッチされたjarを真のソースとみなされるリモートのMavenリポジトリのもので上書きするかどうかです。

+0

アーティファクトをインストールすると、以前にインストールされたものを上書きします。しかし、なぜあなたはそれをインストールする必要がありますか? – Tunaki

+0

あなたの質問が分かりません。 「jarファイルをリポジトリディレクトリに直接コピーできるだけのときにinstall-fileを呼び出すのはなぜですか?」という意味ですか、「なぜあなたはMavenリポジトリの内容を変更していますか」という意味ですか? – Dave

答えて

2

そのjarファイルを上書きすることができる唯一の3つのシナリオがあります。

  1. はあなたのローカル平方メートルのリポジトリからjarファイルを削除した場合、それはリモートリポジトリからあなたのMavenプロジェクトをビルドする次回にダウンロードされます。
  2. '-U'オプションを使用してmavenプロジェクトをビルドする場合。これを行うと、mavenはリモートリポジトリから依存関係を更新します。
  3. 同じアーティファクト(更新されたコード)で同じバージョンのmvnをインストールする場合。
+0

シナリオを列挙してくれてありがとう。私はMavenがチェックサム解析を毎回行って、アーティファクトが変更され、それに応じて動作するかどうかを判断すると考えましたが、Mavenのアーティファクトは不変であると考えられています。たぶん、スナップショットの動作が違うかもしれません。 – Dave

+0

はい。私が言及した振る舞いは、静的(非スナップショット)バージョンにのみ適用されます。スナップショットの場合、更新ポリシーは、アーティファクトがリモートリポジトリから更新される頻度を定義します。変更したアーティファクトをローカルリポジトリに保存する場合は、スナップショットバージョンを使用しないことを強くお勧めします。 –

+0

特定のリポジトリ(マネージャ)を使用して別のリポジトリに変更すると、mavenがアーティファクトを再ダウンロードすることがわかりました。たとえば、私たちは職場でNexusを使用しますが、家に帰ると、私のsettings.xmlが家のNexusインスタンスを指し示すように変更されます(誰もがそうですよね?)。この結果、Mavenは異なるリポジトリからの同じアーティファクトが異なるとみなすため、多くのアーティファクトを再ダウンロードします。ローカルの '〜/ .m2/repository'に、各アーティファクトに関連付けられた' _remote.repositories'ファイルに置かれている追加のメタデータを見ることができます。 –

関連する問題