Ich habe eine Abzweigung einer kleinen Open-Source-Bibliothek, an der ich an Github arbeite. Ich möchte es anderen Entwicklern über maven zur Verfügung stellen, aber ich möchte keinen eigenen Nexus-Server betreiben, und da es sich um eine Abzweigung handelt, kann ich es nicht einfach auf oss.sonatype.org bereitstellen.
Ich möchte es auf Github bereitstellen, damit andere mit Maven darauf zugreifen können. Was ist der beste Weg, dies zu tun?
maven
github
github-pages
mvn-repo
emmby
quelle
quelle
Antworten:
Die beste Lösung, die ich finden konnte, besteht aus folgenden Schritten:
mvn-repo
, um Ihre Maven-Artefakte zu hosten.mvn-repo
als Maven-Repository verwendet wird.Dieser Ansatz bietet mehrere Vorteile:
mvn-repo
, ähnlich wie Github-Seiten in einem separaten Zweig namensgh-pages
(wenn Sie Github-Seiten verwenden).gh-pages
wenn Sie sie verwenden.mvn deploy
Sie es einfach wie gewohntDie typische Art und Weise, wie Sie Artefakte für ein Remote-Maven-Repo bereitstellen, ist die Verwendung
mvn deploy
. Lassen Sie uns also diesen Mechanismus für diese Lösung patchen.Weisen Sie maven zunächst an, Artefakte an einem temporären Staging-Speicherort in Ihrem Zielverzeichnis bereitzustellen. Fügen Sie dies zu Ihrem hinzu
pom.xml
:Versuchen Sie jetzt zu laufen
mvn clean deploy
. Sie werden sehen, dass Ihr Maven-Repository für bereitgestellt wurdetarget/mvn-repo
. Der nächste Schritt besteht darin, das Verzeichnis auf GitHub hochzuladen.Fügen Sie Ihre Authentifizierungsinformationen hinzu,
~/.m2/settings.xml
damit der Githubsite-maven-plugin
auf GitHub pushen kann:(Wie bereits erwähnt, stellen Sie bitte sicher,
chmod 700 settings.xml
dass niemand Ihr Passwort in der Datei lesen kann. Wenn jemand weiß, wie das Site-Maven-Plugin ein Passwort auffordert, anstatt es in einer Konfigurationsdatei zu benötigen, lassen Sie es mich wissen.)Dann informieren Sie den GitHub
site-maven-plugin
über den neuen Server, den Sie gerade konfiguriert haben, indem Sie Ihrem POM Folgendes hinzufügen:Konfigurieren Sie abschließend das
site-maven-plugin
Hochladen von Ihrem temporären Staging-Repo in Ihremvn-repo
Filiale auf Github:Der
mvn-repo
Zweig muss nicht vorhanden sein, er wird für Sie erstellt.Jetzt
mvn clean deploy
nochmal laufen . Das maven-deploy-plugin sollte die Dateien in Ihr lokales Staging-Repository im Zielverzeichnis "hochladen" und dann das site-maven-plugin diese Dateien festschreiben und auf den Server übertragen.Besuchen Sie github.com in Ihrem Browser, wählen Sie den
mvn-repo
Zweig aus und überprüfen Sie, ob alle Ihre Binärdateien jetzt vorhanden sind.Herzliche Glückwünsche!
Sie können Ihre Maven-Artefakte jetzt einfach durch Ausführen für das öffentliche Repo eines armen Mannes bereitstellen
mvn clean deploy
.Es gibt noch einen weiteren Schritt, den Sie ausführen möchten: Konfigurieren Sie alle Poms, die von Ihrem Pom abhängen, um zu wissen, wo sich Ihr Repository befindet. Fügen Sie dem Pom eines Projekts das folgende Snippet hinzu, das von Ihrem Projekt abhängt:
Jetzt werden alle Projekte, für die Ihre JAR-Dateien erforderlich sind, automatisch von Ihrem Github Maven-Repository heruntergeladen.
Bearbeiten: Um das in den Kommentaren erwähnte Problem zu vermeiden ('Fehler beim Erstellen des Commits: Ungültige Anforderung. Für' Eigenschaften / Name 'ist nil keine Zeichenfolge.'), Geben Sie in Ihrem Profil auf github einen Namen an.
quelle
<merge>true</merge>
in Ihrer Site-Maven-Plugin-Konfiguration fest. Wenn Sie dies jedoch tun, müssen Sie den Zweig mvn-repo in github manuell erstellen und alle seine Dateien beim ersten Mal löschen.<altDeploymentRepository>internal.repo::default::file://${user.dir}/target/mvn-repo</altDeploymentRepository>
mit mehreren Modulen funktioniert , können Sie es auch einfach mit dem Maven-Deploy-Plugin und<outputDirectory>${user.dir}/target/mvn-repo</outputDirectory>
mit dem Site-Maven-Plugin verwenden . Dadurch werden alle Artefakte im Root-Projekt ("übergeordnetes Projekt") bereitgestellt und in das entsprechende übergeordnete Verzeichnis auf Github verschoben. Andernfalls wird die Build jeden Teilmodul , das von dem Submodul vor gebaut überschreiben ...<github.global.userName>YourUserName</github.global.userName> <github.global.password>${GITHUB_OAUTH_TOKEN</github.global.password>
Verwenden Sie GitHub nicht als Maven-Repository.
Bearbeiten: Diese Option erhält viele Abstimmungen, aber keine Kommentare, warum. Dies ist die richtige Option, unabhängig von den technischen Möglichkeiten, um tatsächlich auf GitHub zu hosten. Das Hosting auf GitHub ist aus allen unten genannten Gründen falsch und ohne Kommentare kann ich die Antwort zur Klärung Ihrer Probleme nicht verbessern.
Beste Option - Arbeiten Sie mit dem Originalprojekt zusammen
Die beste Option ist, das ursprüngliche Projekt davon zu überzeugen, Ihre Änderungen aufzunehmen und beim Original zu bleiben.
Alternative - Pflegen Sie Ihre eigene Gabel
Da Sie eine Open Source-Bibliothek gegabelt haben und Ihre Gabel auch Open Source ist, können Sie Ihre Gabel in Maven Central hochladen (siehe Anleitung zum Hochladen von Artefakten in das Central Repository ), indem Sie ihr eine neue
groupId
und möglicherweise eine neue gebenartifactId
.Ziehen Sie diese Option nur in Betracht, wenn Sie bereit sind, diese Verzweigung beizubehalten, bis die Änderungen in das ursprüngliche Projekt übernommen wurden, und Sie diese Option dann aufgeben sollten.
Überlegen Sie wirklich genau, ob eine Gabel die richtige Option ist. Lesen Sie die unzähligen Google-Ergebnisse für "Warum nicht gabeln?"
Argumentation
Wenn Sie Ihr Repository mit Gläsern aufblähen, wird die Downloadgröße ohne Nutzen erhöht
Ein JAR gehört
output
zu Ihrem Projekt, es kann jederzeit neu generiert werdeninputs
, und Ihr GitHub-Repo sollte nur enthalteninputs
.Glaubst du mir nicht? Überprüfen Sie dann die Google-Ergebnisse auf "Binärdateien nicht in Git speichern" .
Die Hilfe von GitHub Wenn Sie mit großen Dateien arbeiten , erfahren Sie dasselbe. Zugegeben, JARs sind nicht groß, aber sie sind größer als der Quellcode, und sobald ein JAR durch eine Version erstellt wurde, haben sie keinen Grund, versioniert zu werden - dafür ist eine neue Version gedacht.
Das Definieren mehrerer Repos in Ihrer pom.xml verlangsamt Ihren Build um die Anzahl der Repositorys mal die Anzahl der Artefakte
Stephen Connolly sagt :
Das stimmt! Maven muss jedes in Ihrer pom.xml definierte Artefakt (und seine Abhängigkeiten) mit jedem von Ihnen definierten Repository vergleichen , da möglicherweise eine neuere Version in einem dieser Repositorys verfügbar ist.
Probieren Sie es selbst aus und Sie werden den Schmerz eines langsamen Aufbaus spüren.
Der beste Ort für Artefakte ist Maven Central, da es der zentrale Ort für Gläser ist. Dies bedeutet, dass Ihr Build immer nur einen Ort überprüft .
Weitere Informationen zu Repositorys finden Sie in der Dokumentation von Maven zur Einführung in Repositorys
quelle
Sie können JitPack (kostenlos für öffentliche Git-Repositorys) verwenden, um Ihr GitHub-Repository als Maven-Artefakt verfügbar zu machen . Es ist sehr leicht. Ihre Benutzer müssten dies zu ihrer pom.xml hinzufügen:
Wie an anderer Stelle beantwortet , besteht die Idee darin, dass JitPack Ihr GitHub-Repo erstellt und die Gläser bedient. Voraussetzung ist, dass Sie eine Build-Datei und eine GitHub-Version haben.
Das Schöne ist, dass Sie sich nicht um Bereitstellung und Uploads kümmern müssen. Da Sie kein eigenes Artefakt-Repository verwalten wollten, passt es gut zu Ihren Anforderungen.
quelle
Eine andere Alternative ist die Verwendung eines Webhostings mit Webdav-Unterstützung. Sie werden natürlich irgendwo etwas Platz dafür benötigen, aber es ist einfach einzurichten und eine gute Alternative zum Ausführen eines vollwertigen Nexus-Servers.
Fügen Sie dies Ihrem Build-Bereich hinzu
Fügen Sie Ihrem DistributionManagement-Bereich so etwas hinzu
Stellen Sie schließlich sicher, dass Sie den Repository-Zugriff in Ihrer settings.xml einrichten
Fügen Sie dies Ihrem Serverbereich hinzu
und eine Definition für Ihren Repository-Bereich
Wenn Sie ein Standard-PHP-Hosting haben, können Sie so etwas wie Sabredav verwenden, um Webdav-Funktionen hinzuzufügen.
Vorteile: Sie haben Ihr eigenes Maven-Repository. Nachteile: Sie haben keine der Verwaltungsfunktionen in Nexus. Sie benötigen irgendwo ein Webdav-Setup
quelle
Seit 2019 können Sie jetzt die neue Funktionalität namens Github-Paketregistrierung verwenden .
Grundsätzlich ist der Prozess:
settings.xml
Bereitstellen mit
quelle
Als Alternative bietet Bintray das kostenlose Hosting von Maven-Repositories. Dies ist wahrscheinlich eine gute Alternative zu Sonatype OSS und Maven Central, wenn Sie die groupId absolut nicht umbenennen möchten. Aber bitte bemühen Sie sich zumindest, Ihre Änderungen vorab zu integrieren oder umzubenennen und in Central zu veröffentlichen. Es macht es für andere viel einfacher, Ihre Gabel zu benutzen.
quelle
Wenn Sie nur
aar
oderjar
Datei selbst haben oder einfach keine Plugins verwenden möchten, habe ich ein einfaches Shell-Skript erstellt . Sie können dasselbe damit erreichen - indem Sie Ihre Artefakte in Github veröffentlichen und als öffentliches Maven-Repo verwenden.quelle