L'hébergement d'un Maven repository sur github
J'ai une fourche d'un petit open source de la bibliothèque que je suis en train de travailler 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 une fourchette, je ne peux pas facilement mettre à oss.sonatype.org.
Ce que je voudrais faire est de déployer sur github afin que d'autres puissent accéder à l'aide de maven. Quelle est la meilleure façon de le faire?
- ce que les questions de licences êtes-vous confrontés dans OSS Sonatype? Juste curieux, depuis que j'utilise moi-même.
- Il y a un outil qui vous permet d'exposer votre dépôt GitHub via maven directement. jitpack.io stackoverflow.com/a/28483461/3975649
- Github a également annoncé un paquet de registre qui prend en charge maven. Actuellement en public beta: github.com/features/package-registry
Vous devez vous connecter pour publier un commentaire.
La meilleure solution que j'ai pu trouver se compose des étapes suivantes:
mvn-repo
pour accueillir vos artefacts maven.mvn-repo
comme un référentiel.Il y a plusieurs avantages à l'utilisation de cette approche:
mvn-repo
, un peu comme github pages sont conservées dans une branche distincte appeléegh-pages
(si vous utilisez github pages)gh-pages
si vous les utilisez.mvn deploy
comme vous le feriez normalementTypique de la façon de déployer des artefacts à une distance repo maven est d'utiliser
mvn deploy
, alors allons-patch pour que le mécanisme de cette solution.Tout d'abord, dites maven pour déployer des artefacts à un transfert temporaire de l'emplacement à l'intérieur de votre répertoire cible. Ajoutez ceci à votre
pom.xml
:Maintenant, essayez d'exécuter
mvn clean deploy
. Vous verrez que il a déployé votre repository maven pourtarget/mvn-repo
. La prochaine étape consiste à obtenir pour télécharger ce répertoire GitHub.Ajouter vos informations d'authentification pour
~/.m2/settings.xml
de sorte que le githubsite-maven-plugin
pouvez pousser GitHub:(Comme l'a noté, 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 faire site-maven-plugin demander un mot de passe au lieu de l'exiger dans un fichier de config, laissez-moi savoir.)Alors dites-le GitHub
site-maven-plugin
sur le nouveau serveur que vous venez de configurer en ajoutant les lignes suivantes à votre pom:Enfin, configurez le
site-maven-plugin
à télécharger à partir de votre transit temporaire des pensions de votremvn-repo
branche sur Github:La
mvn-repo
branche n'a pas besoin d'exister, il sera créé pour vous.Maintenant exécuter
mvn clean deploy
de nouveau. Vous devriez voir maven-déployer-plugin "upload" les fichiers de votre local, mise en scène de référentiel dans le répertoire cible, puis site-maven-plugin de commettre ces fichiers et de les pousser vers le serveur.Visite github.com dans votre navigateur, sélectionnez le
mvn-repo
de la branche, et de vérifier que tous vos fichiers binaires sont maintenant là.Félicitations!
Vous pouvez maintenant déployer votre maven objets à un pauvre homme public des pensions de simplement en exécutant
mvn clean deploy
.Il y a une étape de plus vous aurez envie de prendre, qui est de configurer tous les boutons qui dépendent de votre pom de savoir où votre dépôt. Ajouter l'extrait de code suivant à tout pom du projet qui dépend de votre projet:
Maintenant tout projet qui a besoin de vos fichiers jar télécharger automatiquement à partir de votre github repository maven.
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', nil n'est pas une chaîne de caractères.'), assurez-vous de l'état un nom dans votre profil sur github.
mvn-repo
branche.)<merge>true</merge>
dans votre site-maven-plugin de configuration. Si vous le faites, cependant, je pense que vous allez avoir à créer manuellement le mvn-repo branche sur github et supprimer tous les fichiers de la première fois autour.<id>
&<url>
éléments du référentiel? Est-il de la convention de là..? Peut-on tester l'url pour vous assurer qu'il fonctionne bien...? J'ai été en mesure de créer des & pousser le mvn-pensions de branche pour mon projet sur GitHub. Mais pas clair comment spécifier le repo URL & id dans le projet dépendant de la POM. (Veuillez vous référer à mon post ci-dessous). Merci beaucoup.<repositories> <repository> <id>id</id> <url>https://github.com/My-Group/comapny/tree/mvn-repo/</url> <snapshots> <enabled>true</enabled> <updatePolicy>always</updatePolicy> </snapshots> </repository> </repositories>
<altDeploymentRepository>internal.repo::default::file://${user.dir}/target/mvn-repo</altDeploymentRepository>
avec le maven-déployer-plugin, et<outputDirectory>${user.dir}/target/mvn-repo</outputDirectory>
avec site-maven-plugin. Cela permettra de déployer tous les artefacts dans la racine ("parent") du projet, et de la pousser à la parents respectifs direcory sur github. Sinon, la construction de chaque sous-module de réécriture que de le sous-module construit avant...<github.global.userName>YourUserName</github.global.userName> <github.global.password>${GITHUB_OAUTH_TOKEN</github.global.password>
maven-site-plugin
dit: basedir n'existe pas (malgré le fait que c'est en effet en existe un). 🙁settings.xml
fichier et mettre en<repositoryOwner>your-organization-name</repositoryOwner>
dans le fichier pom.export GITHUB_OAUTH_TOKEN=xxx
Ne pas utiliser GitHub comme un Référentiel.
Edit: Cette option obtient beaucoup de votes contre, mais pas de commentaires quant à savoir pourquoi. C'est l'option correcte quelle que soit la technique, les capacités à accueillir sur GitHub. L'hébergement sur GitHub est pas le cas pour toutes les raisons exposées ci-dessous et sans commentaires, je ne peux pas améliorer la réponse à clarifier vos questions.
Meilleure Option - Collaborer avec le Projet d'Origine
La meilleure option est de les convaincre que le projet original d'inclure vos modifications et le bâton avec l'original.
Alternative, de Maintenir votre Fourchette
Puisque vous avez fourchue, une bibliothèque open source, et votre fourche est également open source, vous pouvez télécharger votre fourche à Maven Central (lire Guide pour le téléchargement des artefacts vers le Dépôt Central) en lui donnant une nouvelle
groupId
et peut-être une nouvelleartifactId
.Seulement envisager cette option si vous êtes prêt à maintenir cette fourchette jusqu'à ce que les modifications sont intégrées dans le projet d'origine, alors vous devriez abandonner celui-ci.
Examiner vraiment dur de savoir si une fourche, c'est la bonne option. Lire la myriade de résultats de Google pour "pourquoi pas à la fourche"
Raisonnement
Ballonnements votre référentiel avec des bocaux augmente la taille de téléchargement pour aucun avantage
Un pot est un
output
de votre projet, il peut être régénéré à tout moment à partir de soninputs
, et votre dépôt GitHub doit contenir uniquementinputs
.Ne me croyez pas? Puis vérifier les résultats de Google pour 'ne pas stocker de fichiers binaires dans git.
De GitHub aider à Travailler avec des fichiers volumineux vous diront la même chose. Certes jar ne sont pas grandes, mais elles sont plus grandes que le code source et une fois un pot a été créé par une version, ils n'ont aucune raison d'être versionné - qu'est ce qu'une nouvelle version est pour.
Définition de plusieurs pensions de titres dans votre pom.xml ralentit votre construction par le Nombre de Dépôts de fois Nombre d'Artefacts
Stephen Connolly dit:
C'est le droit! Maven doit vérifier chaque artefact (et ses dépendances) définis dans votre pom.xml contre chaque Dépôt que vous avez défini, comme une version plus récente pourrait être disponible dans l'un de ces référentiels.
L'essayer pour vous-même et vous vous sentirez la douleur d'une construction lente.
Le meilleur endroit pour les objets, est dans Maven Central, comme la place centrale pour les pots, et cela signifie que votre build ne jamais vérifier un place.
Vous pouvez lire un peu plus sur les dépôts à Maven de la documentation sur Introduction aux Référentiels
Vous pouvez utiliser JitPack (gratuit pour le public, de dépôts Git) pour exposer votre dépôt GitHub comme un artefact Maven. Il est très facile. Vos utilisateurs doivent ajouter à leur pom.xml:
Comme réponse à d'ailleurs l'idée est que JitPack sera de construire votre dépôt GitHub et de servir les pots. L'exigence est que vous avez un fichier de build et un GitHub libération.
La bonne chose est que vous n'avez pas à gérer le déploiement et les téléchargements. Puisque vous ne voulez pas à jour votre propre artefact référentiel ses un bon match pour vos besoins.
Une autre alternative est d'utiliser un hébergement web avec webdav. Vous aurez besoin de l'espace pour cela quelque part, bien sûr, mais il est simple à mettre en place et une bonne alternative à l'exécution d'une véritable serveur nexus.
ajouter à votre section
Ajouter quelque chose comme ceci à votre distributionManagement section
Enfin, assurez-vous pour l'installation de l'accès au référentiel dans votre settings.xml
l'ajouter à vos serveurs section
et une définition de vos dépôts section
Enfin, si vous avez n'importe quel standard de php hosting, vous pouvez utiliser quelque chose comme sabredav pour ajouter des fonctionnalités webdav.
Avantages: vous avez votre propre repository maven
Inconvénients: vous ne disposez pas de la capacité de gestion dans nexus; vous avez besoin de quelques webdav de configuration quelque part
Comme une alternative, Bintray offre l'hébergement gratuit de dépôts maven. C'est probablement une bonne alternative à Sonatype OSS et Maven Central si vous ne veulent absolument pas renommer l'id de groupe. Mais s'il vous plaît, au moins faire un effort pour obtenir vos modifications intégrées en amont ou de les renommer et de les publier à la Centrale. Il rend beaucoup plus facile pour les autres d'utiliser votre fourche.
Si vous avez seulement
aar
oujar
fichier lui-même, ou tout simplement ne voulez pas utiliser les plugins: - j'ai créé un simple script shell. Vous pouvez réaliser la même chose avec elle - la publication de vos artefacts à Github et l'utiliser comme public repo Maven.