J'ai un fork d'une petite bibliothèque open source sur laquelle je travaille sur github. Je voudrais le rendre disponible à d'autres développeurs via maven, mais je ne veux pas exécuter mon propre serveur Nexus, et parce que c'est un fork, je ne peux pas facilement le déployer sur oss.sonatype.org.
Ce que j'aimerais faire, c'est le déployer sur github pour que les autres puissent y accéder en utilisant maven. Quelle est la meilleure façon de procéder?
maven
github
github-pages
mvn-repo
emmby
la source
la source
Réponses:
La meilleure solution que j'ai pu trouver consiste en ces étapes:
mvn-repo
pour héberger vos artefacts maven.mvn-repo
comme référentiel maven.Cette approche présente plusieurs avantages:
mvn-repo
, tout comme les pages github sont conservées dans une branche distincte appeléegh-pages
(si vous utilisez des pages github)gh-pages
si vous les utilisez.mvn deploy
comme vous le feriez normalementLa façon typique de déployer des artefacts sur un référentiel maven distant est d'utiliser
mvn deploy
, nous allons donc patcher dans ce mécanisme pour cette solution.Tout d'abord, dites à maven de déployer les artefacts dans un emplacement de stockage temporaire dans votre répertoire cible. Ajoutez ceci à votre
pom.xml
:Maintenant, essayez de courir
mvn clean deploy
. Vous verrez qu'il a déployé votre référentiel maven surtarget/mvn-repo
. L'étape suivante consiste à obtenir qu'il télécharge ce répertoire sur GitHub.Ajoutez vos informations d'authentification
~/.m2/settings.xml
pour que le githubsite-maven-plugin
puisse pousser vers GitHub:(Comme indiqué, assurez-vous de
chmod 700 settings.xml
assurer que personne ne peut lire votre mot de passe dans le fichier. Si quelqu'un sait comment demander au site-maven-plugin un mot de passe au lieu de l'exiger dans un fichier de configuration, faites-le moi savoir.)Ensuite, informez le GitHub
site-maven-plugin
du nouveau serveur que vous venez de configurer en ajoutant ce qui suit à votre pom:Enfin, configurez le
site-maven-plugin
téléchargement de votre référentiel temporaire vers votremvn-repo
succursale sur Github:le
mvn-repo
succursale n'a pas besoin d'exister, elle sera créée pour vous.Maintenant, exécutez à
mvn clean deploy
nouveau. Vous devriez voir maven-deploy-plugin "télécharger" les fichiers vers votre référentiel de stockage local dans le répertoire cible, puis site-maven-plugin valider ces fichiers et les envoyer au serveur.Visitez github.com dans votre navigateur, sélectionnez la
mvn-repo
succursale et vérifiez que tous vos fichiers binaires sont maintenant là.Toutes nos félicitations!
Vous pouvez maintenant déployer vos artefacts maven dans le dépôt public d'un pauvre en exécutant simplement
mvn clean deploy
.Il y a une autre étape que vous voudrez prendre, qui est de configurer tous les poms qui dépendent de votre pom pour savoir où se trouve votre référentiel. Ajoutez l'extrait suivant au pom de tout projet qui dépend de votre projet:
Désormais, tout projet nécessitant vos fichiers jar les téléchargera automatiquement depuis votre référentiel github maven.
Edit: pour éviter le problème mentionné dans les commentaires ('Erreur lors de la création du commit: requête non valide. Pour' propriétés / nom ', nil n'est pas une chaîne.'), Assurez-vous d'indiquer un nom dans votre profil sur github.
la source
<merge>true</merge>
votre configuration de site-maven-plugin. Si vous faites cela, cependant, je pense que vous devrez créer manuellement la branche mvn-repo dans github et supprimer tous ses fichiers la première fois.<altDeploymentRepository>internal.repo::default::file://${user.dir}/target/mvn-repo</altDeploymentRepository>
le maven-plugin-deploy et<outputDirectory>${user.dir}/target/mvn-repo</outputDirectory>
avec le plug-in site-maven . Cela déploiera tous les artefacts dans le projet racine ("parent") et les poussera dans le répertoire parent respectif sur github. Sinon, la construction de chaque sous-module écrasera celle du sous-module construit avant ...<github.global.userName>YourUserName</github.global.userName> <github.global.password>${GITHUB_OAUTH_TOKEN</github.global.password>
N'utilisez pas GitHub comme référentiel Maven.
Edit: Cette option obtient beaucoup de votes négatifs, mais aucun commentaire sur la raison. C'est l'option correcte quelles que soient les capacités techniques à héberger sur GitHub. L'hébergement sur GitHub est mauvais 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 - Collaborez avec le projet d'origine
La meilleure option est de convaincre le projet d'origine d'inclure vos modifications et de s'en tenir à l'original.
Alternative - Entretenez votre propre fourche
Comme vous avez créé une bibliothèque open source et que votre fork est également open source, vous pouvez télécharger votre fork sur Maven Central (lire le Guide de téléchargement d'artefacts dans le référentiel central ) en lui donnant un nouveau
groupId
et peut-être un nouveauartifactId
.Ne considérez cette option que si vous êtes prêt à conserver cette fourchette jusqu'à ce que les modifications soient incorporées dans le projet d'origine, puis vous devez abandonner celui-ci.
Réfléchissez vraiment si une fourche est la bonne option. Lisez la myriade de résultats Google pour «pourquoi ne pas bifurquer»
Raisonnement
Faire gonfler votre référentiel avec des pots augmente la taille du téléchargement sans aucun avantage
Un bocal fait partie
output
de votre projet, il peut être régénéré à tout moment à partir de soninputs
, et votre dépôt GitHub ne doit contenir queinputs
.Tu ne me crois pas? Vérifiez ensuite les résultats de Google pour «ne pas stocker les binaires dans git» .
L'aide de GitHub Travailler avec des fichiers volumineux vous dira la même chose. Certes, les fichiers jar ne sont pas grands, mais ils sont plus grands que le code source et une fois qu'un fichier a été créé par une version, ils n'ont aucune raison d'être versionnés - c'est à cela que sert une nouvelle version.
La définition de plusieurs référentiels dans votre pom.xml ralentit votre génération par le nombre de référentiels multiplié par le nombre d'artefacts
Stephen Connolly dit :
C'est vrai! Maven doit vérifier chaque artefact (et ses dépendances) défini dans votre pom.xml par rapport à chaque référentiel que vous avez défini , car une version plus récente peut être disponible dans l'un de ces référentiels.
Essayez-le par vous-même et vous ressentirez la douleur d'une construction lente.
Le meilleur endroit pour les artefacts est dans Maven Central, car c'est l'endroit central pour les bocaux, et cela signifie que votre construction ne vérifiera qu'un seul endroit.
Vous pouvez en savoir plus sur les référentiels dans la documentation de Maven sur Introduction aux référentiels
la source
Vous pouvez utiliser JitPack (gratuit pour les référentiels Git publics) pour exposer votre référentiel GitHub comme un artefact Maven. C'est très facile. Vos utilisateurs devraient ajouter ceci à leur pom.xml:
Comme indiqué ailleurs, l'idée est que JitPack construira votre dépôt GitHub et servira les pots. La condition 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. Étant donné que vous ne vouliez pas maintenir votre propre référentiel d'artefacts, il correspond bien à vos besoins.
la source
Une autre alternative consiste à utiliser n'importe quel hébergement web avec support webdav. Vous aurez besoin d'un peu 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
Ajoutez quelque chose comme ça à votre section de gestion de distribution
Enfin, assurez-vous de configurer l'accès au référentiel dans votre settings.xml
ajoutez ceci à votre section serveurs
et une définition à votre section de référentiels
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 référentiel maven Inconvénients: vous n'avez aucune des capacités de gestion dans nexus; vous avez besoin d'une configuration webdav quelque part
la source
Depuis 2019, vous pouvez désormais utiliser la nouvelle fonctionnalité appelée registre de packages Github .
Fondamentalement, le processus est le suivant:
settings.xml
déployer à l'aide
la source
Comme alternative, Bintray fournit un hébergement gratuit des référentiels maven. C'est probablement une bonne alternative à Sonatype OSS et Maven Central si vous ne voulez absolument pas renommer le groupId. Mais s'il vous plaît, faites au moins un effort pour intégrer vos modifications en amont ou renommer et publier sur Central. Cela rend beaucoup plus facile pour les autres d'utiliser votre fourche.
la source
Si vous avez seulement
aar
oujar
fichier lui - même, ou tout simplement ne voulez pas utiliser des plugins - j'ai créé un script shell simple . Vous pouvez obtenir le même résultat en publiant vos artefacts sur Github et en l'utilisant comme référentiel public Maven.la source