Ce site met a disposition le build journalier de la traduction francaise du Maven: The Definitive Guide
Consultez :
  • Les documents de reference sur le projet original
  • Les sources de la traduction fr sur GitHub
  • maven


    3.3. Syntaxe de POM

    Le POM se trouve toujours dans un fichier pom.xml dans le répertoire racine d'un projet Maven. Ce document XML peut commencer par la déclaration XML, mais elle n'est pas obligatoire. Toutes les valeurs dans un POM se présentent sous la forme d'éléments XML.

    3.3.1. Les versions d'un projet

    La balise version d'un projet Maven contient le numéro de version stable qui est utilisé pour regrouper et ordonner les distributions. Les versions dans Maven se décomposent ainsi : version majeure, version mineure, version incrémentale et qualifieur. Dans un numéro de version, ces différents éléments se présentent selon le format suivant :

    <version majeure>.<version mineure>.<version incrémentale>-<qualifieur>

    Par exemple, la version "1.3.5" correspond à la version majeure 1, mineure 3 et incrémentale 5. La version "5" correspond à la version majeure 5 sans version mineure ou incrémentale. Le qualifieur est utilisé pour les builds des étapes intermédiaires : distributions alpha ou beta, et il est séparé des autres éléments de version par un tiret. Par exemple, la version "1.3-beta-01" a une version majeure 1, mineure 3 et un qualifieur "beta-01".

    Suivre ces préconisations pour les numéros de version prend tout son sens lorsque vous commencez à utiliser des intervalles pour vos versions dans les POMs. Les intervalles de versions seront abordés dans la Section 3.4.3, « Intervalle de versions pour une dépendance ». Ils permettent de spécifier une dépendance dont la version est comprise dans cet intervalle. Cela n'est possible que parce que Maven est capable de trier les versions en se basant sur le format de numéro de version dont nous venons de parler.

    Si votre numéro de version respecte le format <majeure>.<mineure>.<incrémentale>-<qualifieur> alors vos versions seront correctement ordonnées, "1.2.3" sera donc bien considérée comme plus récente que "1.0.2". La comparaison se fera en utilisant les valeurs numériques des versions majeure, mineure et incrémentale. Si votre numéro de version ne respecte pas ce standard, alors vos versions seront comparées comme des chaînes de caractères ; la chaîne "1.0.1b" sera comparée à la chaîne "1.2.0b".

    3.3.1.1. Numéro de version de build

    Un des problèmes avec les numéros de version est l'ordonnancement des qualifieurs. Prenez par exemple, les numéros de version “1.2.3-alpha-2” et “1.2.3-alpha-10” où “alpha-2” correspond au second build alpha et “alpha-10” au dixième build alpha. Alors que le build “alpha-10” devrait être considéré comme plus récent que le build “alpha-2”, Maven va mettre “alpha-10” avant “alpha-2”. Ceci est dû à un problème connu dans la façon dont Maven traite les numéros de version.

    Maven doit, en théorie, considérer le nombre après le qualifieur comme le numéro du build. En d'autres termes, le qualifieur devrait être "alpha", et le numéro du build 2. Même si Maven a été conçu pour séparer le numéro du build du qualifieur, cette fonctionnalité ne fonctionne pas actuellement. En conséquence, "alpha-2" et "alpha-10" sont comparés comme des chaînes de caractères, ce qui positionne "alpha-10" avant "alpha-2" alphabétiquement. Pour contourner cette limitation, vous devez compléter à gauche vos numéros de version de build qualifiés. Si vous utilisez "alpha-02" et "alpha-10" vous n'aurez plus ce problème, et tout continuera à bien fonctionner le jour où Maven traitera correctement les numéros de version de build.

    3.3.1.2. Les versions SNAPSHOT

    Les numéros de versions dans Maven peuvent contenir une chaîne de caractères pour indiquer que le projet est en cours de développement. Si une version contient la chaîne “SNAPSHOT”, alors Maven va prendre en compte cette clef et la convertir en une valeur de type date et heure au format UTC (Coordinated Universal Time) quand vous installerez ou publierez ce composant. Par exemple, si votre projet est en version “1.0-SNAPSHOT” et que vous déployez ses artefacts sur un dépôt Maven, Maven va alors convertir cette version en “1.0-20080207-230803-1” si vous réalisez votre déploiement le 7 Février 2008 à 23:08 UTC. En d'autres termes, quand vous déployez un snapshot, vous ne livrez pas un composant logiciel ; vous livrez un instantané d'un composant.

    Pourquoi utiliser cette fonctionnalité ? Les versions SNAPSHOT sont utilisées pour les projets en cours de développement. Si votre projet dépend d'un composant logiciel en cours de développement, vous pouvez dépendre d'une version SNAPSHOT, Maven essayera alors de télécharger périodiquement la dernière version snapshot du dépôt lorsque vous lancerez votre build. De même, si la prochaine livraison de votre système est la version "1.4", tant que votre projet n'est pas livré définitivement, il devrait être en version "1.4-SNAPSHOT".

    Par défaut, Maven ne va pas vérifier la présence de versions SNAPSHOT sur les dépôts distants. Pour pouvoir dépendre de versions SNAPSHOT les utilisateurs doivent donc activer explicitement le téléchargement des snapshots au travers des balises XML repository ou pluginRepository dans le POM.

    Lorsque vous livrez un projet vous devriez remplacer toutes vos dépendances sur des versions SNAPSHOT par des dépendances vers des versions stables. Si un projet dépend d'un SNAPSHOT, il n'est pas stable car ses dépendances peuvent évoluer dans le temps. Les artefacts publiés sur les dépôts Maven stables comme http://repo1.maven.org/maven2 ne peuvent pas dépendre de versions SNAPSHOT. Le Super POM de Maven désactive la publication de snapshots sur le dépôt Central. Les versions SNAPSHOT sont utilisées uniquement pour le développement.