2017-08-31 2 views
2

Ich habe ein lokales Repository, in dem ich seit einiger Zeit Jars für verschiedene Projekte installiert habe. Wir haben auch einen Nexus-Server laufen, aber es hat nicht alle Gläser, die ich lokal habe.Synchronisiere mein lokales Maven-Repository mit dem öffentlichen Nexus-Repository

Ich kann versuchen, Gläser bis nexus eins nach dem anderen zu synchronisieren. Aber gibt es einen effizienteren Weg, um mit Nexus zu synchronisieren? Idealerweise würde ich einen einzigen Befehl ausführen wollen, der alle Artefakte in meinem lokalen Repo durchschaut und alles verschiebt, was im Nexus fehlt.

Wenn ein cmd-Skript der einzige Weg ist, wäre es sehr nützlich mit speziellen Tipps dazu.

Ich könnte ein Update auf meine Fortschritte geben bisher

echo off 
echo MavenSync 
setlocal EnableDelayedExpansion 
for /R . %%f in (*) do (
    set jarfile=%%~dpnxf 
    set name=%%~dpnf 
    set pomFile=!name!.pom 
    set clientJar=!name!-client.jar 

    if [!jarfile:~-4!]==[.jar] (
    echo !jarfile! 
    echo !pomFile! 
    set repo=http://server/nexus/content/repositories/releases/ 

    if [!jarfile:~-10!]==[client.jar] (

     rem Handled elsewhere 

    ) else (

     if [!jarfile:~-12!]==[SNAPSHOT.jar] (
     set repo=http://server/nexus/content/repositories/snapshots/ 
    ) 

     if EXIST !clientJar! (
     echo mvn deploy:deploy-file -Dpackaging=jar -DrepositoryId=nexus -Durl=!repo! -DpomFile="!pomFile!" -Dfile="!jarfile!" -Dfiles="!clientJar!" -Dtypes=client-jar -Dclassifiers=bin 
    ) else (
     echo mvn deploy:deploy-file -Dpackaging=jar -DrepositoryId=nexus -Durl=!repo! -DpomFile="!pomFile!" -Dfile="!jarfile!" 
    ) 

    ) 
) 
) 
+1

Grundproblem ist, dass alle Projekt in den Nexus-Server liefern müssen ... das löst das ganze Problem ... – khmarbaise

Antwort

-1

Es gibt kein Mittel, das ohne das Schreiben eines benutzerdefinierten Skript leicht tun. Wenn Sie jedoch einen Build haben, der alles erstellt und lokal über mvn install installiert, können Sie es auf Ihrem Nexus bereitstellen, indem Sie mvn deploy tun. Dazu Sie arbeiten müssen für distributionManagement einen Abschnitt zu Ihrem pom hinzuzufügen:

<distributionManagement> 
    <snapshotRepository> 
     <id>snapshot.nexus</id> 
     <url>${nexus.snapshot.repo}</url> 
    </snapshotRepository> 
    <repository> 
     <id>release.nexus</id> 
     <url>${nexus.release.repo}</url> 
    </repository> 
</distributionManagement> 

Dies wird die neueste Version von jedem Projekt jedoch nur entfalten, und nicht die Rückseite der Geschichte der älteren Versionen.

Abhängig von der von Ihnen verwendeten Nexus-Version kann es möglich sein, den Inhalt Ihres Dateisystems zu kopieren. Nexus 2 verwendet Dateisystem-basierten Speicher, sodass Sie möglicherweise Ihren .m2-Repo mit dem Remote-Speicher vergleichen und die verschiedenen Projekte nach Bedarf kopieren können. Sobald die erforderlichen Änderungen kopiert wurden, sollte eine Neuindizierung des Remote-Repos die vorgenommenen Änderungen übernehmen. Nexus 3 speichert die Artefakte jedoch in einer Datenbank. Wenn Sie diese Version verwenden, ist dies nicht möglich.

-1

Das Maven Ziel deploy:deploy-file

http://maven.apache.org/plugins/maven-deploy-plugin/deploy-file-mojo.html

können einzelne Artefakte Nexus (mit angeschlossenem pom, so dass Sie die GAV nicht manuell angeben müssen) bereitstellen.

Sie müssen ein Skript schreiben, das über Ihr lokales Repository läuft, alle Artefakte sammelt und das obige Ziel verwendet, um sie für Nexus bereitzustellen.

+0

Dies beantwortet nicht wirklich die Frage? – robjwilkins

+0

@robjwilkins Meine Antwort ist wahrscheinlich viel hilfreicher als deine. Das OP sagt, dass die Gläser bereits existieren. Ich biete einen Pfad an, wie man ein Skript schreibt, das die gegebene Situation repariert. –

Verwandte Themen