ローカル アーティファクトを使用して Nexus リポジトリを更新する

StackOverflow https://stackoverflow.com/questions/4243477

  •  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 リポジトリ) を動作させるには、コンテンツをホストされているリポジトリにコピーする必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top