Eigenes Maven-Repository mit Nexus

Wer sich einmal an den Komfort von Dependency Management in seinen Java-Projekten gewöhnt hat, will darauf so schnell nicht mehr verzichten. Um so störender ist es dann, wenn eine benötigte Bibliothek nicht in einem der großen öffentlichen Repositories zu finden ist. Das kommt zum einen bei Closed Source Software, aber auch bei selbst entwickelten Anwendungen, die natürlich niemand dort hochgeladen hat. Zum Glück ist es aber kein Problem selbst ein Repository zu betreiben und mit den fehlenden Artefakten zu befüllen. Wir zeigen hier, wie sich innerhalb weniger Minuten ein eigenes Maven-Repository mit Nexus aufsetzen und verwenden lässt.

 

Installation

Wir gehen für Installation von einem Linux-System aus. Da Nexus Java-basiert ist läuft es aber auch problemlos unter Windows.

  1. Als erstes sollte sichergestellt werden dass Java in der Version 7 oder höher installiert ist. Wenn nicht muss das nachgeholt werden.
     
  2. Per Putty oder lokalem Terminal schnappen wir uns eine Kommandozeile und wechseln in das gewünschte Installationsverzeichnis. Wir nehmen für das Beispiel /home/nexus
  3. Jetzt laden wir die aktuellste Nexus OSS Version herunter und entpacken sie
  4. Da sich bei neuen Nexus-Versionen der Ordner-Name ändern würde, erstellen wir einen Link darauf den wir später verwenden werden
  5. Und schon können wir Nexus probeweise starten
  6. Die Web-Oberfläche sollte danach unter
    http://<IP>:8081/nexus verfügbar sein
    Nexus Startseite
  7. Bevor es richtig losgeht stoppen wir aber Nexus per STRG+C wieder und richten es erst noch ordentlich als Dienst ein.
    Dazu wird das Start-Skript nach init.d kopiert und ausführbar gemacht 
  8. Nun müssen per Editor noch ein paar Einstellungen im Start-Skript angepasst werden:
    • NEXUS_HOME=“/home/nexus/nexus“
    • RUN_AS_USER=“nexus“
    • PIDDIR=“/home/nexus/nexus

  9. Das war es auch schon und der Dienst kann gestartet werden

 

Konfiguration des Maven-Repository

Bevor wir Nexusals Maven-Repository einsetzen, sollten noch ein paar Kleinigkeiten konfiguriert werden. Dies erfolgt komfortabel über die Web-Oberfläche.

Die beiden Standard-Benutzer „admin“ und „deployment“ verwenden noch die Default-Passwörter „admin123“ bzw. „deployment123“. Diese sollten natürlich geändert werden. Dazu melden wir uns mit dem jeweiliger Benutzer an und wählen im Menü neben dem Benutzernamen „Profile“ aus. Hier lässt sich per „Change Password“ das Passwort ändern.

Nexus dient nicht nur als Maven-Repository für eigene Software, es agiert auch als Proxy und Cache für andere Repositories wie etwa Maven Central oder Apache. Damit diese durchsucht werden können muss Nexus Index-Dateien beziehen, was aber zunächst deaktiviert ist. Um das zu ändern wechseln wir auf die Ansicht Views > Repositories und klicken dort der Reihe nach alle Repositories mit dem Typ „proxy“ an. Hier wird unter Configuration die Einstellung „Download Remote“ auf true gesetzt und gespeichert. Der Download läuft danach im Hintergrund ab, was ein paar Minuten dauern kann.
Ob alles geklappt hat lässt sich ganz einfach testen in dem wir im Suchfeld am linken Rand z.B. nach „Guava“ suchen. Funktioniert alles, sollten wir jede Menge Treffer aus den Proxy-Repositories finden.
Konfigiration des Maven-Repository

 

Nexus im Buildskript verwenden

Jetzt wird es aber Zeit Nexus in Aktion zu sehen. Dazu muss das eigene Repository in ein Buildskript eingebunden werden. Das folgende Beispiel ist für ein Gradle-Skript, Maven-Benutzer werfen einfach einen Blick in die offizielle Dokumentation.

Um Artefakte aus Maven zu beziehen, wird einfach die URL als Repository in build.gradle eingetragen. Vorhandene andere Maven-Repositories sollten natürlich entfernt werden.

Gradle wird jetzt alle Abhängigkeiten aus unserem Nexus-Repository beziehen. Da dieses wie schon erwähnt als Proxy für öffentliche Repositories fungiert, werden auch so ziemlich alle Open Source Bibliotheken problemlos gefunden.

Artefakte zu beziehen ist aber nur die halbe Miete, natürlich sollte ein Build-Skript auch eigene Bibliotheken automatisch in das Repository hochladen können. Das ist mit Gradles Maven-Plugin kein Problem, wir müssen nur den Task „uploadArchives“ passend konfigurieren. Wichtig ist dabei, dass wir eine andere URL verwenden die nicht auf das Public-Repository zeigt, sondern eines das tatsächlich auf unserem Server liegt. Zum Beispiel das für Releases.

 

Artefakte manuell hinzufügen

Natürlich werden nicht alle Artefakte von einem Build-Skript in das Repository gestellt. Häufig liegen lokal schon fertige JARs vor, die nur noch Richtung Nexus geschickt werden müssen.

Dazu wählen wir zunächst das „3rd party“-Repository unter Views > Repositories aus. Im Tab „Artifact Upload“ wählen wir zunächst per „Select Artifact(s) for Upload“ die hochzuladenden Dateien aus und bestätigen jeweils mit „Add Artifact“. In der Regel handelt es sich dabei um die JAR mit den kompilierten Class-Dateien und, falls vorhanden, eine weitere JAR mit dem Quellcode.

Unter „GAV Definition“ muss jetzt noch GAV Parameters ausgewählt werden. Praktischerweise errät Nexus über die Namen der JAR-Dateien die meisten Parameter von selbst, so dass nur noch die „Group“ ausgefüllt werden muss. Üblicherweise wird hier der Package-Name aus Java verwendet, also z.B. org.foo.

Per „Upload Artifacts“ werden die Dateien und Konfiguration an den Server geschickt und die JAR-Dateien sind ab sofort als Maven-Artefakte verfügbar.

 

Weiter gehts

Natürlich haben wir mit dieser kurzen Einführung nur an der Oberfläche gekratzt. Unser eigenes Maven-Repository ist zwar für den produktiven Einsatz fertig, kann aber eigentlich noch viel mehr. Daher sei hier noch ein Blick in die sehr gute Dokumentation empfohlen.

Sollten Sie Hilfe zum Thema Maven-Repository oder ganz allgemein zur Automatisierung der Entwicklungs-Infrastruktur benötigen, stehen wir Ihnen gerne zur Verfügung!

Kontakt

Getagged mit: , , , ,

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*

* Copy This Password *

* Type Or Paste Password Here *