Introduction : Découverte de la version « vivante »
\n\nImaginez 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 ?
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\n1. Qu'est-ce qu'un Maven Snapshot ? (Explication pour débutants)
\n\nDans 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
- 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
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.
2. Pourquoi un Snapshot est-il nécessaire ? Principaux cas d'utilisation
\n\nLe Snapshot résout trois problèmes clés dans le développement en équipe :
\n\n2.1. Intégration continue (CI/CD)
\nImaginez 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.
2.2. Dépendances entre modules au sein d'un même projet
\nDans 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.
2.3. Test des intégrations avant la release
\nSupposons 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.
3. À quoi ressemble un Snapshot dans un vrai pom.xml ?
\n\nIl suffit d'ajouter le suffixe -SNAPSHOT à la version. Voici un exemple :
<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\nEt voici comment vous connectez un Snapshot d'un autre projet dans votre pom.xml :
<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\nNotez 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 :
mvn clean install -U\n\n\n