[Maven] Qu'est-ce qu'une version SnapShot ?

Ce billet présuppose que vous connaissez un peu l'utilité de Maven. Si ce n'est pas le cas, je vous conseille d'abord d'aller faire un tour sur l'un de ces liens : Site Officiel (en), Wikipedia.

En ayant eu l'occasion de discuter avec Tanguy lors de la rédaction de mon dernier billet, je me suis souvenu que la notion de version snapshot, proposée par Maven, a le don de pousser les personnes à s'interroger sur sa raison d'être. Il suffit d'aller consulter rapidement les forums de développement ou de soi-même s'initier à l'outil pour le comprendre.

Pourtant la notion de version snapshot est relativement simple à saisir et ne fait que reprendre, sous un autre nom, un système de nommage des versions déjà bien accepté dans la communauté des développeurs.

Les versions release


Commençons par le commencement : les versions release. C'est le deuxième type (et le plus important) de version que propose Maven. Sans surprise, une version release, c'est :
  • Une version stable : les développements ont été terminés, elle a été entièrement testée et n'évoluera donc plus dans le temps,
  • Une version publiée : elle peut donc être utilisée en production ou par d'autres applications en cours de développement.
Si l'on fait le parallèle avec les outils de versionning, du type Subversion, une version release aura été taggée au moment de sa publication.

J'abordais notamment dans mon précédent billet une façon spécifique de publier les versions release de certains types d'application, sans impacter les utilisateurs.

Qu'est-ce qu'une version SnapShot ?


Tout ce que n'est pas une version release. Une version snapshot est donc :
  • En cours de développement,
  • Potentiellement instable,
  • Non garantie comme étant testée,
  • Non accessible en production.
Si l'on considère ces différents points, il est facile de noter que la notion de snapshot regroupe les notions de versions Alpha et Beta, plus largement connues dans le monde du développement.

Dans la logique de Maven, une version snapshot s'identifie avec le "-SNAPSHOT" qui suffixe le numéro de version du projet concerné. Typiquement, une application se trouvant dans une version 1.0.0-SNAPSHOT n'a encore jamais été publiée*.

Une fois recettée et validée, une version snapshot est publiée et devient une release. Le numéro de version est ensuite incrémenté, et une nouvelle version snapshot rentre en cours de développement.

Comment publier une version SnapShot ?


Si vous utilisez les outils communs liés au développement d'un projet (Maven, outil de versionning type Subversion et un dépôt de dépendances Maven type Archiva), la procédure pour publier une version snapshot reste relativement complexe :
  1. Commiter tous les changements puis updater le code,
  2. Exécuter les tests unitaires pour vérifier que rien ne vient les faire échouer,
  3. Supprimer le "-SNAPSHOT" de votre fichier pom.xml,
  4. Tagger la version sur votre outil de versionning,
  5. Checkouter le tag,
  6. Compiler le projet issu du tag,
  7. Publier la dépendance compilée sur le dépôt,
  8. Incrémenter le numéro de version puis ajouter "-SNAPSHOT" à la nouvelle version,
  9. Commiter les changements.
Cette procédure étant identique pour tous les projets, et ce quelque soit leur type, Apache a eu la bonne idée de créer l'excellent plugin release permettant de la réaliser à votre place. Celui-ci fournit ainsi les deux commandes prepare et perform réalisant respectivement les étapes 1 à 4 et 5 à 9. Leur utilisation reste très simple :
  1. mvn release:prepare
  2. mvn release:perform
En cas de problème pendant la phase de publication, la commande mvn release:clean vous permettra de recommencer à zéro.

Je reviendrais, dans un prochain billet, sur la procédure globale de publication d'une release, pouvant poser certains problèmes dans certains cas très particuliers.

Quelques éléments supplémentaires...


Afin de compléter ce billet, voici quelques informations complémentaires qui peuvent vous intéresser :
  • Un projet utilisant des dépendances en version snapshot doit systématiquement être considéré comme étant dans une version snapshot. Cela peut paraître évident ; cependant le plugin release de Maven n'effectue pas ce genre de vérification. Vous pouvez ainsi publier par erreur un projet utilisant une dépendance qui n'est pas officiellement validée.
  • Si le besoin s'en refait sentir (par exemple dans le cadre de projets importants impliquant plusieurs développeurs), vous pouvez rendre disponible une version snapshot sur le dépôt de dépendances, et ce dans un repository spécial nommé... snapshot. Cela permet de ne pas bloquer le développement d'un projet s'il utilise une partie validée de la dépendance en cours de développement. Vous devrez alors être particulièrement vigilant et vous assurez de l'efficacité de vos tests unitaires, vérifiant la stabilité des règles métier quelque soit les évolutions de la dépendance. Je vous laisse consulter la documentation de Maven et de votre dépôt de dépendances pour en savoir plus sur ce point.

Conclusion


En résumé, Maven propose deux grands types de versions :
  • Les versions snapshot, représentant la phase de développement de ladite version,
  • Les versions release, représentant la version stable issue dudit développement.

* Cette assertion dépend de votre politique de nommage de version. C'est un vaste sujet que j'aborderais dans un article plus complet.

0 commentaires: