La meilleure solution que j'ai trouvée consiste en ces étapes :
- Créer une branche appelée
mvn-repo
pour héberger vos artefacts maven.
- Utiliser le site github site-maven-plugin pour pousser vos artefacts sur github.
- Configurer maven pour qu'il utilise votre serveur distant
mvn-repo
en tant que dépôt maven.
Cette approche présente plusieurs avantages :
- Les artefacts Maven sont conservés séparément de votre source dans une branche distincte appelée
mvn-repo
tout comme les pages github sont conservées dans une branche séparée 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.
- Il s'articule naturellement avec la cible de déploiement, de sorte qu'il n'y a pas de nouvelles commandes maven à apprendre. Il suffit d'utiliser
mvn deploy
comme vous le feriez normalement
La manière habituelle de déployer des artefacts vers un repo maven distant est d'utiliser l'option mvn deploy
Nous allons donc utiliser ce mécanisme pour cette solution.
Tout d'abord, demandez à maven de déployer les artefacts dans un emplacement temporaire (staging location) à 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 d'exécuter mvn clean deploy
. Vous verrez qu'il a déployé votre dépôt maven vers target/mvn-repo
. L'étape suivante consiste à télécharger ce répertoire sur GitHub.
Ajoutez vos informations d'authentification à ~/.m2/settings.xml
afin que le site github site-maven-plugin
peut pousser vers 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 indiqué, veillez à chmod 700 settings.xml
pour s'assurer que personne ne puisse lire votre mot de passe dans le fichier. Si quelqu'un sait comment faire pour que site-maven-plugin demande un mot de passe au lieu de l'exiger dans un fichier de configuration, qu'il me le fasse savoir).
Indiquez ensuite à l'interface GitHub site-maven-plugin
sur le 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 depuis votre repo temporaire de mise en scène vers votre mvn-repo
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>
En mvn-repo
n'a pas besoin d'exister, elle sera créée pour vous.
Exécuter maintenant mvn clean deploy
encore une fois. Vous devriez voir maven-deploy-plugin "télécharger" les fichiers dans votre dépôt local dans le répertoire cible, puis site-maven-plugin valider ces fichiers et les pousser sur 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] ------------------------------------------------------------------------
Visitez le site github.com dans votre navigateur, sélectionnez l'onglet mvn-repo
et vérifiez que tous vos binaires s'y trouvent.
Félicitations !
Vous pouvez maintenant déployer vos artefacts maven vers un repo public du pauvre en lançant simplement mvn clean deploy
.
Il y a encore une étape à franchir, qui est de configurer toutes les poms qui dépendent de votre pom pour qu'elles sachent où se trouve votre dépôt. Ajoutez l'extrait suivant à tous les projets pom qui dépendent de votre projet :
<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>
Désormais, tout projet nécessitant vos fichiers jar les téléchargera automatiquement depuis votre dépôt maven github.
Edit : pour éviter le problème mentionné dans les commentaires ('Error creating commit : Demande invalide. For 'properties/name', nil is not a string.'), assurez-vous d'indiquer un nom dans votre profil sur github.
5 votes
Quels sont les problèmes de licence auxquels vous êtes confrontés avec OSS Sonatype ? Je suis simplement curieux car je l'utilise moi-même.
5 votes
Il existe un outil qui vous permet d'exposer votre dépôt GitHub via maven directement. jitpack.io stackoverflow.com/a/28483461/3975649
1 votes
Github a également annoncé un registre de paquets qui prend en charge maven. Actuellement en version bêta publique : github.com/features/package-registry