Die beste Lösung, die ich finden konnte, besteht aus folgenden Schritten:
- Erstellen Sie einen Zweig, der aufgerufen wird
mvn-repo
, um Ihre Maven-Artefakte zu hosten.
- Verwenden Sie das Github Site-Maven-Plugin , um Ihre Artefakte auf Github zu übertragen.
- Konfigurieren Sie maven so, dass Ihre Fernbedienung
mvn-repo
als Maven-Repository verwendet wird.
Dieser Ansatz bietet mehrere Vorteile:
- Maven-Artefakte werden von Ihrer Quelle in einem separaten Zweig namens getrennt gehalten
mvn-repo
, ähnlich wie Github-Seiten in einem separaten Zweig namens gh-pages
(wenn Sie Github-Seiten verwenden).
- Im Gegensatz zu einigen anderen vorgeschlagenen Lösungen steht es nicht in Konflikt mit Ihrer,
gh-pages
wenn Sie sie verwenden.
- Verbindet sich auf natürliche Weise mit dem Bereitstellungsziel, sodass keine neuen Maven-Befehle zu lernen sind. Verwenden
mvn deploy
Sie es einfach wie gewohnt
Die 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
:
<distributionManagement>
<repository>
<id>internal.repo</id>
<name>Temporary Staging Repository</name>
<url>file://${project.build.directory}/mvn-repo</url>
</repository>
</distributionManagement>
<plugins>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.1</version>
<configuration>
<altDeploymentRepository>internal.repo::default::file://${project.build.directory}/mvn-repo</altDeploymentRepository>
</configuration>
</plugin>
</plugins>
Versuchen Sie jetzt zu laufen mvn clean deploy
. Sie werden sehen, dass Ihr Maven-Repository für bereitgestellt wurde target/mvn-repo
. Der nächste Schritt besteht darin, das Verzeichnis auf GitHub hochzuladen.
Fügen Sie Ihre Authentifizierungsinformationen hinzu, ~/.m2/settings.xml
damit der Github site-maven-plugin
auf GitHub pushen kann:
<!-- NOTE: MAKE SURE THAT settings.xml IS NOT WORLD READABLE! -->
<settings>
<servers>
<server>
<id>github</id>
<username>YOUR-USERNAME</username>
<password>YOUR-PASSWORD</password>
</server>
</servers>
</settings>
(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:
<properties>
<!-- github server corresponds to entry in ~/.m2/settings.xml -->
<github.global.server>github</github.global.server>
</properties>
Konfigurieren Sie abschließend das site-maven-plugin
Hochladen von Ihrem temporären Staging-Repo in Ihre mvn-repo
Filiale auf Github:
<build>
<plugins>
<plugin>
<groupId>com.github.github</groupId>
<artifactId>site-maven-plugin</artifactId>
<version>0.11</version>
<configuration>
<message>Maven artifacts for ${project.version}</message> <!-- git commit message -->
<noJekyll>true</noJekyll> <!-- disable webpage processing -->
<outputDirectory>${project.build.directory}/mvn-repo</outputDirectory> <!-- matches distribution management repository url above -->
<branch>refs/heads/mvn-repo</branch> <!-- remote branch name -->
<includes><include>**/*</include></includes>
<repositoryName>YOUR-REPOSITORY-NAME</repositoryName> <!-- github repo name -->
<repositoryOwner>YOUR-GITHUB-USERNAME</repositoryOwner> <!-- github username -->
</configuration>
<executions>
<!-- run site-maven-plugin's 'site' target as part of the build's normal 'deploy' phase -->
<execution>
<goals>
<goal>site</goal>
</goals>
<phase>deploy</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>
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.
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building DaoCore 1.3-SNAPSHOT
[INFO] ------------------------------------------------------------------------
...
[INFO] --- maven-deploy-plugin:2.5:deploy (default-deploy) @ greendao ---
Uploaded: file:///Users/mike/Projects/greendao-emmby/DaoCore/target/mvn-repo/com/greendao-orm/greendao/1.3-SNAPSHOT/greendao-1.3-20121223.182256-3.jar (77 KB at 2936.9 KB/sec)
Uploaded: file:///Users/mike/Projects/greendao-emmby/DaoCore/target/mvn-repo/com/greendao-orm/greendao/1.3-SNAPSHOT/greendao-1.3-20121223.182256-3.pom (3 KB at 1402.3 KB/sec)
Uploaded: file:///Users/mike/Projects/greendao-emmby/DaoCore/target/mvn-repo/com/greendao-orm/greendao/1.3-SNAPSHOT/maven-metadata.xml (768 B at 150.0 KB/sec)
Uploaded: file:///Users/mike/Projects/greendao-emmby/DaoCore/target/mvn-repo/com/greendao-orm/greendao/maven-metadata.xml (282 B at 91.8 KB/sec)
[INFO]
[INFO] --- site-maven-plugin:0.7:site (default) @ greendao ---
[INFO] Creating 24 blobs
[INFO] Creating tree with 25 blob entries
[INFO] Creating commit with SHA-1: 0b8444e487a8acf9caabe7ec18a4e9cff4964809
[INFO] Updating reference refs/heads/mvn-repo from ab7afb9a228bf33d9e04db39d178f96a7a225593 to 0b8444e487a8acf9caabe7ec18a4e9cff4964809
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 8.595s
[INFO] Finished at: Sun Dec 23 11:23:03 MST 2012
[INFO] Final Memory: 9M/81M
[INFO] ------------------------------------------------------------------------
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:
<repositories>
<repository>
<id>YOUR-PROJECT-NAME-mvn-repo</id>
<url>https://github.com/YOUR-USERNAME/YOUR-PROJECT-NAME/raw/mvn-repo/</url>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
</repositories>
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.