ローカル アーティファクトを使用して Nexus リポジトリを更新する
-
27-09-2019 - |
質問
最近、いくつかの Maven アーティファクトをローカル リポジトリ (.m2/repository) に直接ダウンロードしました。Nexus Repository Manager をインストールしたので、すべてのアーティファクトを再度ダウンロードせずにストレージをいっぱいにする必要があります。Nexus リポジトリをローカル リポジトリで更新する方法はありますか。Nexus はパブリック サーバー (セントラル、コードハウスなど) に関するアーティファクトを分離しており、ローカル リポジトリ構造は分離していないため、単純にコピーしたくありません。
アップデート:その間に、ローカル リポジトリから Nexus ストレージ (パブリック リポジトリ) にアーティファクトをコピーしました。Nexus Web アプリ経由でアーティファクトを参照できますが、Maven がどういうわけか Nexus からアーティファクトを解決できません。特に登録する必要があるのでしょうか?パブリックリポジトリのインデックスを再作成し、Nexusを複数回再起動しましたが、変化はありませんでした。
解決
Nexus にはいくつかの種類のリポジトリがあります。 ホストされたリポジトリ (Maven アーティファクトを実際に保存するもの)、 プロキシリポジトリ (アーティファクトが要求されたときにトラフィックを他のリモート リポジトリにリダイレクトします)、 仮想リポジトリ (maven1 リポジトリの単なるアダプター [この質問の範囲外])。作成することもできます リポジトリグループ 任意の集約からのアーティファクトを提供できます ( public
リポジトリもその 1 つです)。
さらに、nexus は公開ポリシーに従ってリポジトリを次のように分割します。 スナップショット そして リリース. 。前者はスナップショット アーティファクトのみを保存します。一方、後者は理論的にはスナップショットとリリースの両方を保存できますが、リポジトリが非常に大きくスナップショットが含まれている場合、実際にはバグのある動作をします。
アーティファクトをホストするには、次のことを行う必要があります。
初め: ローカル リポジトリを 2 つに分割します。1 つはスナップショットを含み、もう 1 つはリリースを含みます。リポジトリが非常に大きい場合は、Nexus リポジトリ変換ツールが役に立ちます。
<dependency>
<groupId>org.sonatype.nexus.tools</groupId>
<artifactId>nexus-repository-conversion-tool</artifactId>
<version>1.8.0.1</version>
<classifier>cli</classifier>
</dependency>
ダウンロードしたら実行するだけです java -jar nexus-repository-conversion-tool-1.8.0.1-cli.jar -rSource -oTarget
どこ Source
nexus に移動するローカル リポジトリを含むディレクトリです。 Target
は、変換ツールが分割されたリポジトリから離れる、既存の空の書き込み可能なディレクトリです。ソースディレクトリが repository
そしてターゲットは temp
, 、それは作成します temp/repository-snapshots
そして temp/repository-releases
ディレクトリ。
2番目: 分割されたリポジトリを nexus に移動します。そしてそれらをそのままにしておきます ${NEXUS_HOME}/sonatype-work/nexus/storage
, 、または Nexus インストールがリポジトリを保存するように構成されている場所。
三番目: 2つ作成する ホストされたリポジトリ 2 番目のステップで移動したリポジトリと同じ ID を持ちます。(例では repository-snapshots
そして repository-releases
)
リポジトリにリリースのみが含まれている場合、ソリューションは機能する可能性がありますが、別の間違いを犯すことになります。Nexus はすべてのリポジトリのアーティファクトを保存しますが、ホストされているリポジトリではないアーティファクトのストレージはキャッシュ目的のみに使用されます ( public
リポジトリ) を動作させるには、コンテンツをホストされているリポジトリにコピーする必要があります。