Qu’est-ce qu’un instantané Maven et pourquoi en avons-nous besoin?

Je suis un peu confus au sujet de la signification d’un instantané Maven et pourquoi nous en construisons un?

Une version instantanée dans Maven est une version qui n’a pas été publiée.

L’idée est que, avant une version 1.0 (ou toute autre version), il existe un 1.0-SNAPSHOT . Cette version est ce qui pourrait devenir 1.0 . C’est fondamentalement ” 1.0 cours de développement”. Cela pourrait être proche d’une version 1.0 réelle, ou assez loin (juste après la version 0.9 , par exemple).

La différence entre une version “réelle” et une version instantanée est que les instantanés peuvent recevoir des mises à jour. Cela signifie que télécharger 1.0-SNAPSHOT aujourd’hui pourrait donner un fichier différent de le télécharger hier ou demain.

Habituellement, les dépendances de cliché ne devraient exister que pendant le développement et aucune version publiée (c.-à-d. Pas de non-cliché) ne devrait dépendre d’une version de cliché.

Les trois autres réponses vous donnent une bonne vision de ce qu’est une version -SNAPSHOT . Je voulais juste append quelques informations concernant le comportement de Maven quand il trouve une dépendance SNAPSHOT .

Lorsque vous créez une application, Maven recherche les dépendances dans le référentiel local . Si une version stable n’y est pas trouvée, elle recherchera les référentiels distants (définis dans settings.xml ou pom.xml ) pour récupérer cette dépendance. Ensuite, il le copiera dans le référentiel local pour le rendre disponible pour les prochaines versions.

Par exemple, une bibliothèque foo-1.0.jar est considérée comme une version stable et si Maven la trouve dans le référentiel local, elle l’utilisera pour la version actuelle.

Maintenant, si vous avez besoin d’une bibliothèque foo-1.0-SNAPSHOT.jar , Maven saura que cette version n’est pas stable et peut être modifiée. C’est pourquoi Maven essaiera de trouver une nouvelle version dans les référentiels distants, même si une version de cette bibliothèque se trouve sur le référentiel local. Cependant, cette vérification est effectuée une seule fois par jour. Cela signifie que si vous avez un foo-1.0-20110506.110000-1.jar (c’est foo-1.0-20110506.110000-1.jar dire que cette bibliothèque a été générée le 2011/05/06 à 11:00:00) dans votre repository local, et si vous exécutez le build Maven à nouveau le même jour, Maven ne vérifiera pas les repositorys pour une version plus récente.

Maven vous permet de modifier cette politique de mise à jour dans la définition de votre référentiel:

  foo-repository ...  true XXX   

XXX peut être:

  • toujours : Maven vérifiera une version plus récente sur chaque version;
  • quotidiennement , la valeur par défaut;
  • intervalle: XXX : un intervalle en minutes (XXX)
  • jamais : Maven n’essaiera jamais de récupérer une autre version. Il le fera uniquement s’il n’existe pas localement. Avec la configuration, la version de SNAPSHOT sera traitée comme les bibliothèques stables.

(le modèle du settings.xml peut être trouvé ici)

Le terme “SNAPSHOT” signifie que la construction est un instantané de votre code à un moment donné.

Cela signifie généralement que la version est une version encore en plein développement.

Au moment de libérer votre code, vous voudrez changer la version répertoriée dans le pom. Donc, au lieu d’avoir un “SNAPSHOT”, vous auriez quelque chose comme “1.0”.

Pour obtenir de l’aide sur la gestion des versions, consultez la spécification du contrôle de version sémantique .

Une “release” est la version finale d’une version qui ne change pas.

Un “snapshot” est un build qui peut être remplacé par un autre build qui porte le même nom. Cela implique que la construction pourrait changer à tout moment et est encore en développement actif.

Vous avez différents artefacts pour différentes versions basées sur le même code. Par exemple, vous pourriez en avoir un avec le débogage et un sans. Un pour Java 5.0 et un pour Java 6. En général, il est plus simple d’avoir une seule version qui fait tout ce dont vous avez besoin. 😉

Les versions Maven peuvent contenir une chaîne littérale “SNAPSHOT” pour indiquer qu’un projet est actuellement en cours de développement.

Par exemple, si votre projet possède une version de «1.0-SNAPSHOT» et que vous déployez les artefacts de ce projet dans un référentiel Maven, Maven étendrait cette version à «1.0-20080207-230803-1» si vous deviez déployer une version à 11 : 20h le 7 février 2008 UTC. En d’autres termes, lorsque vous déployez un instantané, vous ne lancez pas de version d’un composant logiciel. vous publiez un instantané d’un composant à un moment donné.

Les versions instantanées sont donc principalement utilisées pour des projets en cours de développement. Si votre projet dépend d’un composant logiciel en cours de développement, vous pouvez compter sur une version instantanée et Maven tentera régulièrement de télécharger le dernier instantané à partir d’un référentiel lorsque vous exécuterez une génération. De même, si la prochaine version de votre système doit avoir une version «1.8», votre projet aura une version «1.8-SNAPSHOT» jusqu’à sa publication officielle.

Par exemple, la dépendance suivante téléchargerait toujours le dernier JAR de développement 1.8 de Spring:

   org.springframework spring 1.8-SNAPSHOT”  

Maven

Un exemple de processus de publication de maven

entrer la description de l'image ici

Voici à quoi ressemble un instantané pour un référentiel et dans ce cas, il n’est pas activé, ce qui signifie que le référentiel référencé ici est stable et qu’il n’y a pas besoin de mises à jour.

  ...   lds-main LDS Main Repo http://code.lds.org/nexus/content/groups/main-repo  false     

Un autre cas serait pour:

  true  

ce qui signifie que Maven recherchera des mises à jour pour ce référentiel. Vous pouvez également spécifier un intervalle pour les mises à jour avec la balise.

généralement dans maven nous avons deux types de builds 1) builds de snapshots 2) builds de release

  1. Générations de snapshots: SNAPSHOT est la version spéciale qui indique que la copie de déploiement actuelle ne ressemble pas à une version standard, maven vérifie la version pour chaque version du référentiel distant afin que les builds de snapshots ne soient que des builds de maintenance.

  2. Release builds: Release signifie supprimer le SNAPSHOT à la version pour la construction, ce sont les versions de build standard.