Hébergement D'un dépôt Maven sur github
j'ai une fourchette d'une petite bibliothèque ouverte que je travaille sur github. J'aimerais le rendre disponible à d'autres développeurs via maven, mais je ne veux pas lancer mon propre serveur Nexus, et parce que c'est un fork Je ne peux pas le déployer facilement oss.sonatype.org.
ce que j'aimerais faire est de le déployer à github pour que d'autres puissent y accéder en utilisant maven. Quelle est la meilleure façon de le faire?
6 réponses
la meilleure solution que j'ai pu trouver consiste en ces étapes:
- créez une branche appelée
mvn-repo
pour héberger vos artefacts maven. - utilisez le github site-maven-plugin pour pousser vos artefacts à github.
- Configurer maven pour utiliser votre télécommande
mvn-repo
comme un référentiel.
Il y a plusieurs avantages à utiliser ce approche:
- les artefacts Maven sont conservés séparément de votre source dans une branche distincte appelée
mvn-repo
, un peu comme les pages github sont conservées dans une branche distincte appeléegh-pages
(si vous utilisez les pages GitHub) - contrairement à d'autres solutions proposées, elle n'entre pas en conflit avec votre
gh-pages
si vous les utilisez. - est naturellement lié à la cible de déploiement de sorte qu'il n'y a pas de nouvelles commandes maven à apprendre. Juste utilisez
mvn deploy
comme vous le feriez normalement
la façon typique de déployer des artéfacts dans un repo Maven distant est d'utiliser mvn deploy
, donc nous allons Patcher dans ce mécanisme pour cette solution.
tout d'abord, dites à maven de déployer des artéfacts dans un emplacement temporaire à l'intérieur de votre répertoire cible. Ajoutez ceci à votre 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>
essayez maintenant de lancer mvn clean deploy
. Vous verrez qu'il a déployé votre repository maven target/mvn-repo
. La prochaine étape est de télécharger le répertoire de GitHub.
Ajoutez vos informations d'authentification à ~/.m2/settings.xml
pour que le github site-maven-plugin
puisse pousser à GitHub:
<!-- 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>
(comme noté, s'il vous plaît assurez-vous de chmod 700 settings.xml
pour s'assurer que personne ne peut lire votre mot de passe dans le fichier. Si quelqu'un sait comment rendre site-maven-plugin prompt pour un mot de passe au lieu de l'exiger dans un fichier de configuration, laissez-moi savoir.)
alors dites au GitHub site-maven-plugin
à propos du nouveau serveur que vous venez de configurer en ajoutant ce qui suit à votre pom:
<properties>
<!-- github server corresponds to entry in ~/.m2/settings.xml -->
<github.global.server>github</github.global.server>
</properties>
enfin, configurez le site-maven-plugin
pour télécharger à partir de votre compte d'arrêt temporaire vers votre mvn-repo
branche sur 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>
la branche mvn-repo
n'a pas besoin d'exister, elle sera créée pour vous.
recommencez mvn clean deploy
. Vous devriez voir maven-deploy-plugin" Uploader " les fichiers vers votre dépôt de mise en scène locale dans le répertoire cible, puis site-maven-plugin en commettant ces fichiers et en les poussant vers le serveur.
[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] ------------------------------------------------------------------------
visite github.com dans votre navigateur, sélectionnez la branche mvn-repo
et vérifiez que tous vos binaires y sont maintenant.
félicitations!
vous pouvez maintenant déployer vos artéfacts maven dans la réserve publique d'un pauvre homme simplement en lançant mvn clean deploy
.
il y a une autre étape que vous voulez faire, qui est de configurer tous les pom qui dépendent de votre pom pour savoir où se trouve votre dépôt. Ajoutez l'extrait suivant à la mop de tout projet qui dépend de votre projet:
<repositories>
<repository>
<id>YOUR-PROJECT-NAME-mvn-repo</id>
<url>https://raw.github.com/YOUR-USERNAME/YOUR-PROJECT-NAME/mvn-repo/</url>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
</repositories>
maintenant tout projet qui nécessite vos fichiers jar les téléchargera automatiquement à partir de votre GitHub maven référentiel.
Edit: pour éviter le problème mentionné dans les commentaires ("Erreur de création de commettre: demande non Valide. Pour les "propriétés/nom', le néant n'est pas une chaîne.'), assurez-vous de l'état un nom dans votre profil sur github.
N'utilisez pas GitHub comme dépôt Maven.
Edit: cette option obtient beaucoup de votes négatifs, mais aucun commentaire sur la raison. C'est la bonne option, quelles que soient les capacités techniques de l'hôte sur GitHub. Héberger sur GitHub est une erreur pour toutes les raisons décrites ci-dessous et Sans commentaires Je ne peux pas améliorer la réponse pour clarifier vos problèmes.
Meilleure Option - Collaborer avec le projet Original
la meilleure option est de convaincre le projet original d'inclure vos modifications et de s'en tenir à l'original.
Alternative - Maintenir votre Fourchette
depuis que vous avez bifurqué une bibliothèque open source, et votre fourche est aussi open source, vous pouvez télécharger votre fourche à Maven Central (lire Guide pour télécharger des artéfacts vers le dépôt Central ) en lui donnant un nouveau groupId
et peut-être un nouveau artifactId
.
n'envisagez cette option que si vous êtes prêt à maintenir cette fourchette jusqu'à ce que les changements soient incorporés dans le projet original et alors vous devriez abandonner celui-ci.
vraiment réfléchir si une fourchette est la bonne option. Lire la myriade de résultats de Google pour "pourquoi pas à la fourchette'
raisonnement
gonfler votre dépôt avec des pots augmente la taille du téléchargement sans aucun avantage
un bocal est un output
de votre projet, il peut être régénéré à tout moment à partir de son inputs
, et votre GitHub repo ne doit contenir que inputs
.
vous ne me croyez pas? Puis vérifier les résultats de Google pour 'dont store binaires en git' .
de GitHub aider à Travailler avec des fichiers volumineux vous diront la même chose. Certes, les jar ne sont pas grands, mais ils sont plus grands que le code source et une fois qu'un jar a été créé par une version, ILS n'ont aucune raison d'être suivis en versions - c'est à quoi sert une nouvelle version.
définition de repos multiples dans votre pom.xml ralentit votre construction selon le nombre de dépôts multiplié par le nombre d'artefacts
Stephen Connolly dit :
si quelqu'un ajoute votre rapport ils ont un impact sur leur performance de construction comme ils ont maintenant un autre repo pour vérifier les artéfacts contre... Il n'est pas un grand problème si vous n'avez qu'à ajouter un repo... Mais le problème se pose et le suivant ce que vous savez, c'est que votre maçon vérifie 50 repos pour chaque artefact et construire le temps est un chien.
c'est ça! Maven doit vérifier chaque artéfact (et ses dépendances) défini dans votre pom.xml par rapport à chaque dépôt que vous avez défini , car une version plus récente pourrait être disponible dans n'importe lequel de ces dépôts.
l'Essayer pour vous-même et vous vous sentirez la douleur d'une construction lente.
le meilleur endroit pour les artéfacts est à Maven Central, comme c'est le lieu central pour les pots, et cela signifie que votre construction ne vérifiera jamais un" lieu 151970920".
vous pouvez en savoir plus sur les référentiels dans la documentation de Maven sur Introduction aux référentiels
vous pouvez utiliser JitPack pour exposer votre dépôt GitHub comme un artefact Maven. Il est très facile. Vos utilisateurs doivent ajouter à leurs pom.xml:
- ajouter:
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
- ajouter dépendance:
<dependency>
<groupId>com.github.User</groupId>
<artifactId>Repo name</artifactId>
<version>Release tag</version>
</dependency>
Comme réponse ailleurs l'idée est que JitPack sera de construire votre dépôt GitHub et servira à la pot. L'exigence est que vous ayez un fichier de construction et une version GitHub.
La bonne chose est que vous n'avez pas à gérer le déploiement et les téléchargements. Puisque vous ne vouliez pas maintenir votre propre dépôt d'artefacts, c'est une bonne correspondance pour vos besoins.
une autre alternative est d'utiliser n'importe quel hébergement web avec le soutien webdav. Vous aurez besoin d'espace pour cela quelque part bien sûr, mais il est simple à configurer et une bonne alternative à l'exécution d'un serveur nexus complet.
ajoutez ceci à votre section de construction
<extensions>
<extension>
<artifactId>wagon-webdav-jackrabbit</artifactId>
<groupId>org.apache.maven.wagon</groupId>
<version>2.2</version>
</extension>
</extensions>
ajouter quelque chose comme ceci à votre section Gestion de la distribution""
<repository>
<id>release.repo</id>
<url>dav:http://repo.jillesvangurp.com/releases/</url>
</repository>
Enfin, assurez-vous de configurer l'accès au dépôt dans votre paramètre.xml
ajoutez ceci à votre section serveurs
<server>
<id>release.repo</id>
<username>xxxx</username>
<password>xxxx</password>
</server>
et une définition de la section "vos dépôts""
<repository>
<id>release.repo</id>
<url>http://repo.jillesvangurp.com/releases</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
enfin, si vous avez un hébergement php standard, vous pouvez utiliser quelque chose comme sabredav pour ajouter des capacités webdav.
avantages: vous avez votre propre dépôt maven Les inconvénients: vous n'avez aucune des capacités de gestion de nexus; vous avez besoin d'une configuration webdav quelque part
comme alternative, Bintray fournit l'hébergement gratuit de dépôts maven. C'est probablement une bonne alternative à Sonatype OSS et Maven Central si vous ne voulez absolument pas renommer le groupe. Mais s'il vous plaît, au moins faites un effort pour obtenir vos changements intégrés en amont ou renommer et publier en Central. Il rend beaucoup plus facile pour les autres d'utiliser votre fourche.
si vous n'avez que le fichier aar
ou jar
lui - même, ou tout simplement que vous ne voulez pas utiliser de plugins-j'ai créé un simple script shell . Vous pouvez faire la même chose avec it - publier vos artéfacts à Github et l'utiliser comme public Maven repo.