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 plugin github site-maven pour pousser vos artefacts vers github.
- Configurez maven pour utiliser votre télécommande
mvn-repo
comme référentiel 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 distincte appelée gh-pages
(si vous utilisez des pages github)
- Contrairement à d'autres solutions proposées, cela n'entre pas en conflit avec votre
gh-pages
si vous les utilisez.
- S'associe naturellement à la cible de déploiement, il n'y a donc pas de nouvelles commandes maven à apprendre. Utilisez simplement
mvn deploy
comme vous le feriez normalement
La 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
:
<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>
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 github site-maven-plugin
puisse 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é, 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:
<properties>
<!-- github server corresponds to entry in ~/.m2/settings.xml -->
<github.global.server>github</github.global.server>
</properties>
Enfin, configurez le site-maven-plugin
téléchargement de votre référentiel temporaire vers votre mvn-repo
succursale 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>
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.
[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 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:
<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 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.