10 Stimmen

Nexus-Repository mit lokalen Artefakten aktualisieren

Ich habe kürzlich einige Maven-Artefakte direkt in mein lokales Repository (.m2/repository) heruntergeladen. Jetzt habe ich den Nexus Repository Manager installiert und muss seinen Speicher füllen, ohne alle Artefakte erneut herunterzuladen. Gibt es eine Möglichkeit, das Nexus-Repository mit dem lokalen Repository zu aktualisieren. Ich möchte die Artefakte nicht einfach kopieren, da Nexus die Artefakte in Bezug auf die öffentlichen Server (central, codehaus, etc.) trennt und die lokale Repository-Struktur nicht.

Update: Inzwischen habe ich die Artefakte aus dem lokalen Repository in den Nexus-Speicher (öffentliches Repository) kopiert. Ich kann die Artefakte über die Nexus-Webapp aufrufen, aber Maven kann die Artefakte aus Nexus irgendwie nicht auflösen. Muss ich sie speziell registrieren? Ich habe das öffentliche Repository neu indiziert und Nexus mehrere Male neu gestartet - keine Änderungen.

13voto

Miguel Punkte 1869

Nexus hat mehrere Arten von Repositories: gehostete Repositories (diejenigen, die wirklich Maven-Artefakte speichern), Proxy-Repositories (die den Datenverkehr zu anderen entfernten Repositories umleiten, wenn ein Artefakt angefordert wird), virtuelle Repositories (ein bloßer Adapter von maven1-Repositories [außerhalb des Rahmens dieser Frage]). Sie können auch Repository-Gruppen die Artefakte von jedem ihrer Aggregate liefern kann (die public Repository ist eines davon).

Darüber hinaus unterteilt nexus seine Repositories entsprechend seiner Veröffentlichungspolitik in Schnappschüsse y veröffentlicht . Ersteres speichert nur Snapshot-Artefakte, während letzteres theoretisch sowohl Snapshots als auch Releases speichern kann, aber es verhält sich tatsächlich fehlerhaft, wenn das Repo sehr groß ist und Snapshots enthält.

Um Ihre Artefakte zu hosten, müssen Sie:

Erstens: Teilen Sie Ihr lokales Repository in zwei Teile auf: einen, der die Snapshots enthält, und einen anderen, der die Releases enthält. Das Nexus-Repository-Konvertierungstool wird Ihnen helfen, wenn Ihr Repository sehr groß ist:

    <dependency>
        <groupId>org.sonatype.nexus.tools</groupId>
        <artifactId>nexus-repository-conversion-tool</artifactId> 
        <version>1.8.0.1</version>
        <classifier>cli</classifier> 
    </dependency>

Nach dem Herunterladen können Sie einfach Folgendes ausführen java -jar nexus-repository-conversion-tool-1.8.0.1-cli.jar -rSource -oTarget donde Source ist das Verzeichnis, das das lokale Repository enthält, das nach nexus verschoben werden soll, und Target ist ein vorhandenes, leeres und beschreibbares Verzeichnis, in dem das Konvertierungstool die aufgeteilten Repositories belässt. Vorausgesetzt, das Quellverzeichnis ist repository und Ziel ist temp erstellt sie temp/repository-snapshots y temp/repository-releases Verzeichnisse.

Zweitens: verschieben Sie Ihre gesplitteten Repos nach Nexus. Und lassen Sie sie in ${NEXUS_HOME}/sonatype-work/nexus/storage oder wo auch immer Ihre Nexus-Installation so konfiguriert ist, dass sie die Repositories speichert.

Drittens: zwei erstellen gehostete Repositories mit der gleichen ID wie die Repos, die Sie im zweiten Schritt verschoben haben. (im Beispiel repository-snapshots y repository-releases )

Wenn Ihr Repo nur Releases enthalten würde, hätte Ihre Lösung funktionieren können, aber Sie hätten einen weiteren Fehler begangen. Obwohl nexus Artefakte für jedes Repository speichert, dient die Speicherung derjenigen, die keine gehosteten Repos sind, nur zu Caching-Zwecken (wie im Fall des public Repository), müssten Sie Ihre Inhalte in ein gehostetes Repository kopieren, damit es funktioniert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X