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?

287
demandé sur MozenRath 2012-12-23 22:43:35

6 réponses

la meilleure solution que j'ai pu trouver consiste en ces étapes:

  1. créez une branche appelée mvn-repo pour héberger vos artefacts maven.
  2. utilisez le github site-maven-plugin pour pousser vos artefacts à github.
  3. 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ée gh-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.

enter image description here

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.

446
répondu emmby 2016-06-13 14:49:03

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

109
répondu Bae 2018-01-28 01:59:05

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:

  1. ajouter:
<repository>
    <id>jitpack.io</id>
    <url>https://jitpack.io</url>
</repository>
  1. 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.

36
répondu Andrejs 2017-05-23 10:31:38

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

8
répondu Jilles van Gurp 2013-09-27 13:49:10

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.

7
répondu Guillaume 2014-08-24 13:00:26

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.

0
répondu Orest Savchak 2018-10-09 20:58:41