805 votes

En quoi consiste exactement un Snapshot de Maven et pourquoi avons-nous besoin ?

<p>Je suis un peu confus sur la signification d’un instantané de Maven et pourquoi nous construisons un ?</p>

959voto

Joachim Sauer Points 133411

Un instantané de la version de Maven est un qui n'a pas été publié.

L'idée est que, avant un 1.0 (ou toute autre version), il existe un 1.0-SNAPSHOT. Cette version est ce que pourrait devenir l' 1.0. En gros, c'est "1.0 sous développement". Cela pourrait être proche d'un réel 1.0 de presse, ou de très loin (à droite après l' 0.9 de presse, par exemple).

La différence entre une "vraie" version et une version de capture instantanée est que les snapshots peuvent obtenir des mises à jour. Cela signifie que le téléchargement de l' 1.0-SNAPSHOT aujourd'hui pourrait donner un autre fichier que le téléchargement d'hier ou de demain.

Généralement, instantané dépendances devraient seulement exister au cours du développement et pas de version (c'est à dire pas non instantané) doit avoir une dépendance sur une version de capture instantanée.

766voto

romaintaz Points 32120

Les trois autres réponses vous donner une bonne vision de ce qu'un -SNAPSHOT version est. Je voulais juste ajouter quelques informations concernant le comportement de Maven lorsqu'il trouve un SNAPSHOT de dépendance.

Lorsque vous créez une application, Maven va rechercher les dépendances dans le local de dépôt. Si une version stable ne s'y trouve pas, il va rechercher les dépôts distants (définie en settings.xml ou pom.xml) pour récupérer cette dépendance. Puis, il va le copier dans le dépôt local, afin de le rendre disponible pour les constructions suivantes.

Par exemple, un foo-1.0.jar bibliothèque est considérée comme stable version, et si Maven trouve dans le dépôt local, il va l'utiliser pour la génération en cours.

Maintenant, si vous avez besoin d'un foo-1.0-SNAPSHOT.jar bibliothèque, Maven va savoir que cette version n'est pas stable et est sujet à des modifications. C'est pourquoi Maven va essayer de trouver une nouvelle version dans les dépôts distants, même si une version de cette bibliothèque se trouve sur le référentiel local. Toutefois, cette vérification est effectuée qu'une seule fois par jour. Cela signifie que si vous avez un foo-1.0-20110506.110000-1.jar (c'est à dire cette bibliothèque a été généré sur 2011/05/06 à 11:00:00) dans votre dépôt local, et si vous exécutez l'Maven build de nouveau le même jour, Maven va pas vérifier les dépôts pour une version plus récente.

Maven vous offre un moyen de peut changer cette politique de mise à jour de votre référentiel de définition:

<repository>
    <id>foo-repository</id>
    <url>...</url>
    <snapshots>
        <enabled>true</enabled>
        <updatePolicy>XXX</updatePolicy>
    </snapshots>
</repository>

XXX peut être:

  • toujours: Maven va vérifier une nouvelle version à chaque génération;
  • quotidienne, la valeur par défaut;
  • intervalle:XXX: un intervalle en minutes (XXX)
  • jamais: Maven ne sera jamais essayer de récupérer une autre version. Il fera cela seulement si il n'existe pas localement. Avec la configuration, SNAPSHOT version sera gérée comme stable bibliothèques.

(modèle de l'settings.xml peut être trouvé ici)

66voto

jjnguy Points 62123
<p>Le terme « Instantané » signifie que la build est un instantané de votre code à un moment donné.</p> <p>Cela signifie généralement que la version est une version encore en développement lourd.</p> <p>Quand vient le temps de communiquer votre code, vous voudrez changer la version répertoriée dans le pom. Donc au lieu d’avoir un « instantané », vous devriez avoir quelque chose comme « 1.0 ».</p> <p>Pour plus d’aide avec gestion des versions, consultez la <a href="http://semver.org/">spécification de la sémantique de Versioning</a>.</p>

26voto

Peter Lawrey Points 229686

Une "libération" est la dernière version pour une version qui ne change pas.

Un "instantané" est un build qui peut être remplacé par un autre build qui a le même nom. Il est implique de les construire peut modifier à tout moment et est encore en développement actif.

Vous avez des artefacts différents pour les différents builds basés sur le même code. E. g. vous pourriez avoir l'un avec le débogage et l'autre sans. Un pour Java 5.0 et une pour la version 6 de Java. Généralement, sa plus simple d'avoir un build qui fait tout ce dont vous avez besoin. ;)

5voto

Kati Holasz Points 11
<p>C’est ainsi un instantané ressemble à un référentiel et dans ce cas n’est pas activé, ce qui signifie que le référentiel visé ici est stable et il n’y a pas besoin de mises à jour.<pre><code></code></pre><p>Un autre cas serait de :</p><pre><code></code></pre><p>ce qui signifie que Maven recherchera les mises à jour pour ce dépôt. Vous pouvez également spécifier un intervalle pour les mises à jour avec la balise.</p></p>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X