Sonatype Nexus verwaltet Software-Bibliotheken oder -Abhängigkeiten und erlaubt deren bequeme Verteilung und Integration in Software-Projekte. Benötigt ein Entwickler eine bestimmte Bibliothek in seinem Projekt, so kann er sie über gängige Build-Tools wie Maven, Gradle, Ivy, Sbt oder andere dann vom Nexus-Server beziehen und eigene weiterentwickelte Bibliotheken diesem wiederum zur Verfügung stellen.
Wie ein solches internes Repository in wenigen Schritten aufgesetzt wird, zeigt dieses Tutorial. Im Anschluss daran stellen wir eine noch schnellere Variante mithilfe des Tools Docker vor.
Warum ein eigenes Repository?
Verschiedene Gründe sprechen für die Installation eines Nexus-Servers im Firmennetzwerk: Zunächst steht durch ihn ein Server für eigene, interne Bibliotheken und Abhängigkeiten zur Verfügung und ermöglicht so eine zentrale, sichere Verwaltung interner Projekte.
Des weiteren dient der Nexus-Server auch als Cache, da er externe Repositories spiegeln kann. So wird der Entwickler in seiner Arbeit nicht gebremst, wenn beispielsweise externe Repositories nicht erreichbar sind.
Außerdem besteht die Möglichkeit, auch Abhängigkeiten, die nicht im klassischen Maven-Format vorliegen, als solche zu verwalten und in Projekte zu integrieren. Die komfortable Weboberfläche erlaubt es, bequem nach Abhängigkeiten und Bibliotheken zu suchen und sie zu verwalten. Ein schöner Nebeneffekt für das Unternehmen ist dabei noch die Ersparnis an Bandbreite dar.
Installation und Konfiguration
Zunächst wird Nexus von der Sonatype-Website heruntergeladen und dann in ein passendes Verzeichnis entpackt. Danach stehen zwei Verzeichnisse zur Verfügung: Im ersten (nexus-version) befindet sich die Nexus-Anwendung samt Konfigurationsdateien und Skripten zum Initialisieren der Anwendung, im anderen Verzeichnis (sonatype-work) werden gespeicherte Bibliotheken und Laufzeitdaten wie z.B. der Suchindex abgelegt.
Der Nexus-Server kann nun wie folgt gestartet werden:
% ./bin/nexus start Starting Nexus OSS... Started Nexus OSS. % ./bin/nexus status Nexus OSS is running (6041).
Unter der Adresse http://localhost:8081/nexus/ steht nun die Weboberfläche zur Verfügung.
Die Standard-Zugangsdaten sind die folgenden und sollten im Falle einer öffentlich zugänglichen Installation umgehend geändert werden:
- Admin-Benutzer:
- Login: admin
- Passwort: admin123
- Deployment-Benutzer:
- Login: deployment
- Passwort: deployment123
In der Repository-Übersicht kann der Entwickler die vorkonfigurierten Repositories einsehen und bei Bedarf weitere ergänzen. Das erste Repository aus der Übersicht soll im folgenden Schritt in den Entwicklungsprozess integriert werden.
Client/Projekt-Konfiguration zur Nexus-Anbindung
Um nun den Nexus-Server in der Entwicklung mit Maven zu verwenden, sollte er als Mirror entweder global oder im Benutzer-Home-Verzeichnis (~/.m2
) in der Datei settings.xml
eingetragen werden:
<settings> <mirrors> <mirror> <id>seibertmedia-test-nexus</id> <name>Seibert Media Test Nexus</name> <url>http://localhost:8081/nexus/content/groups/public</url> <mirrorOf>*</mirrorOf> </mirror> </mirrors> </settings>
Fehlende Drittanbieter-Repositories ergänzen
Möglicherweise bewirkt die Verwendung der Mirror-Option, dass nun ein Projekt nicht mehr gebaut werden kann, weil ein benötigtes Drittanbieter-Repository fehlt. Dies lässt sich bequem und unkompliziert lösen, indem wir einfach das fehlende Verzeichnis in der Nexus-Verzeichnisverwaltung als neues Proxy-Repository anlegen und dieses im Anschluss daran zu unserem (im obigen Beispiel verwendeten) Gruppen-Repository hinzufügen.
Im folgenden Beispiel fügen wir das Maven-Repository für JBoss-Snapshot-Artefakte zunächst als Proxy-Repository zu unseren verwalteten Repositories hinzu:
Im Anschluss daran konfigurieren wir unser Gruppen-Repository so, dass es das JBoss-Snapshot-Repository berücksichtigt:
Artefakte-Deployment auf das Repository mit Maven
Haben sich im Laufe der Entwicklung Artefakte wie z.B. interne Bibliotheken o.ä. geändert und sollen zur Verfügung gestellt werden, können diese zwar auch per Hand über die Weboberfläche hochgeladen werden, bequemer ist es jedoch, diesen Prozess direkt über das Build-Tool (Maven) zu lösen.
Dazu wird zunächst im betroffenen Maven-Projekt in der Datei pom.xml
die Information ergänzt, welche Repositories für die Verwaltung zuständig sind:
<distributionManagement> <repository> <id>deployment</id> <name>Internal Releases</name> <url>http://localhost:8081/nexus/content/repositories/releases/</url> </repository> <snapshotRepository> <id>deployment</id> <name>Internal Releases</name> <url>http://localhost:8081/nexus/content/repositories/snapshots/</url> </snapshotRepository> </distributionManagement>
Die Zugangsdaten für den Server können ähnlich wie bei der Einstellung des Mirrors in der settings.xml
wie folgt hinterlegt werden:
<settings> <servers> <server> <id>deployment</id> <username>deployment</username> <password>deployment123</password> </server> </servers> </settings>
Schließlich ist es möglich, durch Ausführen des Befehls mvn deploy
im Projektverzeichnis das Artefakt auf den Nexus-Server hochzuladen und bereitzustellen:
% mvn deploy [..] [INFO] ------------------------------------------------------------------------ [INFO] Building test-artifact 1.0.0 [INFO] ------------------------------------------------------------------------ [..]Uploading: http://localhost:8081/nexus/content/repositories/releases/net/seibertmedia/test-artifact/1.0.0/test-artifact-1.0.0.jar Uploaded: http://localhost:8081/nexus/content/repositories/releases/net/seibertmedia/test-artifact/1.0.0/test-artifact-1.0.0.jar (3 KB at 19.2 KB/sec) Uploading: http://localhost:8081/nexus/content/repositories/releases/net/seibertmedia/test-artifact/1.0.0/test-artifact-1.0.0.pom Uploaded: http://localhost:8081/nexus/content/repositories/releases/net/seibertmedia/test-artifact/1.0.0/test-artifact-1.0.0.pom (2 KB at 43.6 KB/sec) Downloading: http://localhost:8081/nexus/content/repositories/releases/net/seibertmedia/test-artifact/maven-metadata.xml Uploading: http://localhost:8081/nexus/content/repositories/releases/net/seibertmedia/test-artifact/maven-metadata.xml Uploaded: http://localhost:8081/nexus/content/repositories/releases/net/seibertmedia/test-artifact/maven-metadata.xml (309 B at 9.7 KB/sec) [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------
Nun steht die Bibliothek auf dem Nexus-Server zur Verfügung und ist über dessen Suchfunktion auffindbar:
Alternativ: One-Minute-Installation mit Docker
Docker ist eine Open-Source-Software, die es schnell und bequem erlaubt, Anwendungen mitmilfe von Betriebssystemvirtualisierung in Containern zu isolieren und zu verwalten. Für eine ganze Bandbreite von Software-Produkten bestehen fertige Docker-Images, die eine schnelle Bereitstellung und Integration der entsprechenden Systeme ermöglichen.
Hier in Kurzform die Einrichtung eines Nexus-Servers mithilfe von Docker:
Der folgende Befehl startet eine virtualisierte Nexus-Instanz auf Port 8081:
docker run -p 8081:8081 --name nexus griff/sonatype-nexus
Hier eine Variante mit Angabe eines dedizierten Datenverzeichnisses:
mkdir -p /devdata/nexus docker run -v /devdata/nexus:/opt/sonatype-work -p 8081:8081 --name nexus griff/sonatype-nexus
Ihr Partner für individuelle Software-Projekte
Planen Sie bereits ein konkretes Software-Projekt? Oder gibt es bestimmte Prozesse in Ihrem Unternehmen, die Ihnen schon lange Kopfzerbrechen bereiten? Bremst ein System oder eine Schnittstelle Ihre Mitarbeiter auf der einen oder Ihre Kunden auf der anderen Seite aus? Dann sprechen Sie mit uns darüber! Wir freuen uns darauf, gemeinsam eine individuelle Lösung zu entwickeln – bei höchster Qualität und voller Kostenkontrolle. Wir legen größten Wert auf Erweiterbarkeit, Performanz, Skalierbarkeit, Plattformunabhängigkeit und Testbarkeit und schaffen individuelle High-End-Software-Lösungen, die sich auch im Nachhinein flexibel ausbauen und verändern lassen.
Weiterführende Infos
Was agile Software-Projekte dem Kunden bringen
Individuelle Software-Entwicklung: Workflows, Branching-Modelle und Continuous Delivery
Vorgehen nach Scrum: Die beste Wahl für den Kunden, die Agentur – und das Produkt
Echte Integration: Das Zusammenspiel von JIRA, Stash und Bamboo im Entwicklungsprozess
Der Beginn eines Happy Ends: Initialer Anforderungs-Workshop für erfolgreiche Projekte
Darum ist eine regelmäßige Kundenpräsenz beim Entwicklungsteam so sinnvoll
Mehr über die Creative-Commons-Lizenz erfahren
Aus der NetBeans-Doku (http://wiki.netbeans.org/FaqNexus): „NetBeans will refuse to download an index from a * mirror.“ Dies dürfte der Grund dafür sein, dass mit der vorgeschlagenenen Konfiguration beim Bearbeiten von Abhängigkeiten in POM-Dateien keine Vorschläge mehr für Versionsnummern usw. erscheinen.
Abhilfe ist eine Spiegelangabe wie die folgende:
central-mirror
Central Mirror
http://localhost:8081/nexus/content/repositories/central/
central