Upload von Third-Party Artefakten in ein Maven Repository per SCP
Manchmal gibt es den Fall, dass es notwendig ist, eine externe Bibliothek in einem Maven Projekt einzubinden. Um nun im Build Zyklus des Maven-Projektes keinen Bruch zu erhalten bietet es sich an, dass Artefakt manuell als Maven Artefakt im Repository zur Verfügung zu stellen.
Wir benutzen bei consolving.de u.a. ein öffentliches Maven Repository ( maven.javastream.de ) in dem wir einige OSS Artefakte den Entwicklern unter unseren Kunden zur Verfügung stellen. Hierbei handelt es sich nicht um ein vollständiges Repository System wie Archiva oder Nexus, sondern um ein lokales Repositry, welche statisch per Web-Server zur Verfügung stellt wird. Das ganze wird befüllt durch einen Jenkins-CI Server, der im Hintergrund alle Projekte periodisch neu dorthin deployed.
Es sind vier Schritte notwendig damit ein Deployment über SCP möglich ist:
- Das Verzeichnis des Repositories muss per scp erreichbar sein – hierzu bietet es sich an, den SSH-Key auf dem Server zu hinterlegen.
- Einrichten der notwendigen Credentials unter der ~/.m2/settings.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <settings> <servers> <server> <id>maven.javastream.de</id> <username>##user##</username> <privateKey>##user##</privateKey> </server> </servers> </settings>
- Vorbereiten des Third-Parts Projektes
Ein vollständiges Maven-Artefakt besteht aus drei Teilen: 1. das Binary, 2. die Sourcen und 3. die JavaDoc Dateien. Alle drei Teile sollten als JAR gepackt werden.
Nachfolgend ein Script, welches die drei notwendigen Teile in Archive packt:#!/bin/bash # Direkt aus dem Directory zu packen scheint die einzige Möglichkeit zu sein, dass die einzelnen Dateien direkt im Root des JARs liegen. cd src jar -c . > ../src.jar cd .. cd doc jar -c . > ../doc.jar cd . cd lib jar -c . > ../lib.jar cd .
- Zuletzt werden nun die drei JARs per Maven-Command in das Repository geladen:
#!/bin/bash #Binary mvn deploy:deploy-file -DgroupId=de.javastream \ -DartifactId=example \ -Dversion=1.0 \ -Dpackaging=jar \ -Dfile=lib.jar \ -DrepositoryId=maven.javastream.de \ -Durl=scp://maven.javastream.de/home/javastream.de/maven # Javadoc mvn deploy:deploy-file -DgroupId=de.javastream \ -DartifactId=example \ -Dversion=1.0 \ -Dclassifier=javadoc \ -Dpackaging=jar \ -Dfile=doc.jar \ -DrepositoryId=maven.javastream.de \ -Durl=scp://maven.javastream.de/home/javastream.de/maven # Sourcen mvn deploy:deploy-file -DgroupId=de.javastream \ -DartifactId=example \ -Dversion=1.0 \ -Dclassifier=sources \ -Dpackaging=jar \ -Dfile=src.jar \ -DrepositoryId=maven.javastream.de \ -Durl=scp://maven.javastream.de/home/javastream.de/maven