Maven Snapshot : qu'est-ce que c'est et pourquoi en a-t-on besoin ? Analyse pour débutants

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction : Découverte de la version « vivante »

\n\n

Imaginez que vous travaillez sur un grand projet Java composé d'une dizaine de modules. Un module (par exemple, core-api) est constamment amélioré par un autre développeur. Vous souhaitez utiliser ses dernières avancées, mais la release officielle (1.0.0) ne sortira que dans un mois. Que faire ? Attendre ? Copier le code ? Aller voir votre collègue et lui demander de compiler un fichier JAR ?

\n\n

La solution est le Maven Snapshot — une version spéciale d'un artefact qui contient toujours la compilation la plus récente. Dans cet article, nous allons voir ce qu'est un Snapshot en termes simples, en quoi il diffère d'une release classique, et pourquoi aucun projet Java moderne ne peut s'en passer.

\n\n

1. Qu'est-ce qu'un Maven Snapshot ? (Explication pour débutants)

\n\n

Dans le monde de Maven, chaque artefact (bibliothèque, module) possède trois coordonnées : groupId, artifactId et version. La version peut être de deux types :

\n\n
    \n
  • Release — une version fixe et stable (par exemple, 1.0.0, 2.3.1). Elle ne change jamais.
  • \n
  • Snapshot — une version « vivante » et modifiable (par exemple, 1.0.0-SNAPSHOT, 2.0.0-SNAPSHOT). C'est un brouillon qui peut être mis à jour à chaque compilation.
  • \n
\n\n

L'idée principale : Un Snapshot pointe toujours vers la version la plus récente du code dans la branche de développement. Si vous ajoutez une dépendance sur 1.0.0-SNAPSHOT, Maven vérifiera à chaque compilation si une nouvelle version de ce snapshot est disponible et la téléchargera.

\n\n

2. Pourquoi un Snapshot est-il nécessaire ? Principaux cas d'utilisation

\n\n

Le Snapshot résout trois problèmes clés dans le développement en équipe :

\n\n

2.1. Intégration continue (CI/CD)

\n

Imaginez que votre serveur CI (Jenkins, GitLab CI) compile le projet toutes les 5 minutes. Si vous utilisez des versions classiques, vous devrez changer manuellement le numéro de version à chaque minute. Avec un Snapshot, ce n'est pas nécessaire — la version 1.0.0-SNAPSHOT sera toujours la plus récente.

\n\n

2.2. Dépendances entre modules au sein d'un même projet

\n

Dans les projets multi-modules (par exemple, backend, frontend-api, common), les modules se référencent souvent les uns les autres. Pendant que le développement est actif, il est pratique d'utiliser des dépendances SNAPSHOT — elles récupèrent automatiquement les dernières modifications.

\n\n

2.3. Test des intégrations avant la release

\n

Supposons que l'équipe A développe la bibliothèque auth-lib et que l'équipe B l'utilise. L'équipe A publie auth-lib:2.0.0-SNAPSHOT, l'équipe B ajoute cette dépendance et voit immédiatement les nouvelles méthodes. Si quelque chose se casse, on peut rapidement revenir à une release stable.

\n\n

3. À quoi ressemble un Snapshot dans un vrai pom.xml ?

\n\n

Il suffit d'ajouter le suffixe -SNAPSHOT à la version. Voici un exemple :

\n\n
<project>\n    <modelVersion>4.0.0</modelVersion>\n    <groupId>com.pythonlib</groupId>\n    <artifactId>my-utils</artifactId>\n    <version>1.0.0-SNAPSHOT</version>  <!-- C'est un Snapshot -->\n    <packaging>jar</packaging>\n</project>\n
\n\n

Et voici comment vous connectez un Snapshot d'un autre projet dans votre pom.xml :

\n\n
<dependencies>\n    <dependency>\n        <groupId>com.otherteam</groupId>\n        <artifactId>auth-lib</artifactId>\n        <version>2.0.0-SNAPSHOT</version>\n    </dependency>\n</dependencies>\n
\n\n

Notez que par défaut, Maven ne met pas en cache les Snapshots indéfiniment. Il vérifie les mises à jour une fois par jour (par défaut). Mais vous pouvez le forcer à mettre à jour toutes les dépendances Snapshot avec le flag -U :

\n\n
mvn clean install -U\n
\n\n

4. Snapshot vs Release : différences clés

Blogs

Book Recommendations