Accéder au contenu principal

Releaser avec Maven sur github

Le but de l'exercice est de releaser un projet Maven simple en utilisant le maven-release-plugin via Cygwin sur la plateforme github. En effet, la procédure serait aussi simple que sur Subversion, à la condition d'avoir ses settings et ses POM au carré, ce que nous allons voir de suite.

Pour mener à bien l'opération, les pré-requis sont les suivants :
  • Avoir un environnement de développement sous Cygwin, le mien étant Windows XP SP3 / Cygwin 2.712, / java 1.6.0_17 / git 1.7.1 avec une auto-complétion des commandes git bien pratique,
  • Avoir une configuration Maven opérationnelle dans le sens où vous avez accès aux maximums de repositories publics et une plateforme d'hébergement/déploiement pour vos archives. La mienne étant Maven 2.2.1 / Nexus™ Open Source Edition 1.7.1. J'avoue avoir de la chance, car j'utilise pour mes tests, ma plateforme d'entreprise (chez Vidal) configurée aux petits oignons par mon collègue Thierry que je salue au passage (@tnehr),
  • Avoir un compte chez github (même gratuit) pour héberger ses sources.
1. Créer son projet Maven

Pour effectuer notre opération vous devez disposer d'un projet Maven simple. Nous allons en générer un à partir de la commande Maven suivante :
mvn archetype:generate
Choisissez de préférence l'archétype maven-archetype-quickstart, qui nous offrira un projet simple (code + tests) à tester.

2. Créer et ajouter son projet sous github

Pour le créer, rien de plus simple, tout se fait au travers de la console d'administration github. Donc, nous allons créer un projet "bar" via la commande :
Create a New Repository
Github vous indiquant comment importer le projet, je passe rapidement sur cette étape, mais voici tout de même pour informations, mes commandes git :
- git init
- git add *
- git commit -m 'Push bar example project'
- git remote add origin git@github.com:ulrich/bar.git
- git push origin master

3. Préparer ses POM

Cette étape est importante, car elle permet de "déployer" dans l'origine, un tag sous github. Pour ce faire, nous allons ajouter dans notre POM, la balise SCM comme indiqué ci-dessous :
<scm>
<connection>scm:git:ssh://git@github.com/ulrich/bar.git</connection>
<url>git:ssh://git@github.com/ulrich/bar.git</url>
</scm>

A vérifier, mais dans le cadre de nos projets avec plusieurs sous-modules, nous avons ajouté systématiquement la balise SCM dans les POM des modules (sachant qu'elle est identique).

Un dernier ajustement concerne la connexion sous github. En effet, lors du déploiement, le plugin aura besoin de commiter, mais surtout de pusher ses modifications effectuées dans le POM. Si vous avez généré une clé SSH avec une passphrase, vous aurez besoin de taper les commandes suivantes, afin d'ajouter votre clé à votre session en cours et ainsi, éviter de bloquer le déploiement.
- ssh-agent /bin/bash
- ssh-add ~/.ssh/id_rsa

4. Exécuter le plugin

Nous voilà en phase finale de procédure, le but étant bien entendu d'utiliser le maven-release-plugin, qui au travers de deux actions/phases consécutives : de faire un tag git avec la version souhaitée, de déployer nos archives JAR et de monter de version notre projet. Nous devrons donc exécuter les commandes suivantes :
- mvn release:prepare
- mvn release:perform -Dgoals=deploy

Voilà ! Il est intéressant de noter les étapes et les commandes par lesquelles, le plugin a exécuté son tag et sa montée de version.

Nous voilà donc avec un tag git fraîchement crée dans github :







N'hésitez pas à me remonter les points, qui peuvent vous sembler obscurs ou incorrects.

Commentaires

anthony a dit…
Salut Ulrich !
Et merci pour cet excellent article !
J'ai suivi tes instructions (sous linux au fait !), et ai rencontré 1 ou 2 problèmes : au début je committais pas mes changements avant de faire la release (ben ! je pensais qu'il allait le faire !); et ensuite il s'est embrouillé (maven-release-plugin) dans le commit (apparemment je suis pas le seul, http://jira.codehaus.org/browse/SCM-556)
Et puis enfin, la dernière étpape (mvn release:perform -Dgoals=deploy) marche mieux quand on a un repo d'entreprise à portée de la main, veinard ;-)
Ca m'a bien aidé en tout cas ! Merci encore et bonne continuation !
Ulrich's Blog a dit…
Tient c'est drôle car je release sous linux au travail, car j'ai des problèmes avec les path win/linux sous mon cygwin.
habitat porterie a dit…
J'ai exactement le même problème entre les paths sous windows.
Ulrich's Blog a dit…
@habitat porterie En effet, sous Windows, il y a un mic-mac entre les path dans le cadre des multi-modules. Du coup, j'ai utilisé un moment une Virtualbox avec Ubuntu et j'avoue ne plus être ennuyé à présent, car je développe et livre sur Linux.

Posts les plus consultés de ce blog

Faire sa machine virtuelle sous Debian ARM avec QEMU

IntroductionL'objet de ce article est de vous expliquer comment faire pas à pas, sa machine virtuelle Debian Wheezytournant sur un processeur ARMavec QEMU. Il est relativement simple de trouver des ressources à ce sujet sur le Web, mais je voulais apporter ma pierre à l'édifice sous forme d'un petit tutorial prêt à l'emploi.
A propos d'ARM et d'émulation, il faut savoir qu'au jour d'aujourd'hui, VirtualBox est incapable de virtualiser un OS tournant sur ARM, cela m'a donc obligé à m'intéresser de plus prêt à QEMU. Et si vous vous demandez pourquoi, je veux émuler de l'ARM, vous le serez au prochain épisode...


QEMUQEMU est un logiciel développé à l'origine par le célébrissime programmeur Fabrice Bellard. Le succès de cet émulateur vient principalement du fait, qu'il est tout aussi capable d'émuler que de virtualiser. La principale différence entre l'émulation et la virtualisation est qu'un émulateur peut faire tourner n&…

Découvrez Aviapod ! (MAJ)

*** Une mise à jour de ce billet a été faite et plus d'explications dans cet article ***

Pour débuter l'année, je vous propose un hors-sujet assez particulier pour ce blog, où cette fois-ci nous ne parlerons pas de byte/fonction/microprocesseur ou autres drôleries de développeurs, mais plutôt d'aviation. En effet, après l'informatique, l'aviation est l'une de mes autres (trop) nombreuses passions !

Il y a environ deux ans, j'ai eu la chance de m'initier au pilotage sur un Cessna 172 Skyhawk à Toussus-Le-Noble et pour parfaire mon éducation en la matière, je suis parti à la recherche de ressources me permettant d'approfondir mes connaissances sur le sujet. Ainsi, je suis tombé sur le podcast Aviapod, qui malheureusement et sans véritablement de raison apparente, a cessé d'émettre au bout du 22ème épisode.
Ce podcast était animé par trois pilotes de lignes et instructeur sur Airbus : Philippe Ceretti, Cyrille Aubry et Cyril Bez. Les émissions s'a…

Aviapod Le Retour

C'est avec un plaisir non dissimulé, que je débute l'écriture de ce blogpost rapide pour effectivement annoncer, que le podcast aéro. Aviapod est de retour ! En effet, ma persévérance a payé et j'ai pu prendre contact avec Philippe, le créateur du podcast et ainsi lui donner envie de se relancer dans l'aventure avec le reste de l'équipe, voici comment cela s'est passé...

Après moult recherches infructueuses, j'ai eu l'idée de contacter par email Len Robinson, qui est un camarde de Philippe Ceretti, le créateur d'Aviapod et souvent cité dans le podcast. Len a eu la gentillesse de transférer l'email à Philippe, qui m'a alors répondu ! Ému et étonné de ma démarche, nous avons alors échangé par email nos impressions sur le travail abattu par l'équipe et rarement récompensé. En effet, une des raisons qui a fait capoter le projet est le faible feedback qu'a eu l'équipe à l'époque et ce au regard du travail accompli, car honnêtement …