Quel est exactement un Maven Instantané et pourquoi avons-nous besoin?
Je suis un peu confus au sujet de la signification d'un Maven Instantané et pourquoi nous en construire un?
Vous devez vous connecter pour publier un commentaire.
Je suis un peu confus au sujet de la signification d'un Maven Instantané et pourquoi nous en construire un?
Vous devez vous connecter pour publier un commentaire.
Un instantané de la version de Maven est un qui n'a pas été publié.
L'idée est que avant un
1.0
la libération (ou toute autre version), il existe un1.0-SNAPSHOT
. Cette version est ce que pourrait devenir1.0
. En gros, c'est "1.0
en voie de développement". Cela peut être près à un réel1.0
de la libération ou de très loin (à droite après le0.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
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 existent 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.
Les trois autres réponses vous fournir une bonne vision de ce qu'est un
-SNAPSHOT
version est. Je voulais juste ajouter quelques informations concernant le comportement de Maven lorsqu'il trouve unSNAPSHOT
dépendance.Lorsque vous créez une application, Maven va rechercher les dépendances dans le local référentiel. Si une version stable ne s'y trouve pas, il va rechercher les dépôts distants (défini dans
settings.xml
oupom.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 un 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 unfoo-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 fournit un moyen de peut changer cette politique de mise à jour de votre référentiel définition:
où
XXX
peut être:SNAPSHOT
version sera gérée comme stable bibliothèques.(modèle de l'settings.xml peut être trouvé ici)
SNAPSHOT
versions:mvn clean package -U
comme par maven tutoriel-U
drapeau. Il ne pourrait pas faire ce que vous attendez grâce à MNG-4142.mvn install
pour installer un pot de version 1.0-SNAPSHOT dans mon local repo. Le lendemain, j'ai fait des modifications au projet, mais ne modifie pas la version, puis lors de l'exécution demvn install
il ne semble pas de changement dans mon local repo. C'est que le comportement attendu? Je ne peux pas ré-utiliser une version et l'écraser avecmvn install
après avoir fait des modifications?Le "SNAPSHOT" terme signifie que la construction est un instantané de votre code à un moment donné.
Cela signifie généralement que cette version est encore en développement.
Lorsque le code est prêt, et il est temps de le relâcher, vous voulez changer la version figurant dans le POM. Alors au lieu d'avoir un "aperçu", vous devez utiliser une étiquette comme "1.0".
Pour de l'aide avec la gestion des versions, consultez le Sémantique gestion des versions de la spécification.
Une "release" 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 implique que la construction 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. 😉
Maven versions peut contenir une chaîne littérale "INSTANTANÉ" pour signifier qu'un projet est actuellement en cours de développement.
Par exemple, si votre projet a une version “1.0-SNAPSHOT” et de déployer ce projet de objets à un repository Maven,
Maven permettrait d'élargir cette version de “1.0-20080207-230803-1” si vous étiez à
déployer une version à 11:08 PM le 7 février 2008 UTC. En d'autres mots, lorsque vous
déployer un instantané, vous n'en font pas une version d'un composant logiciel; vous êtes
la libération d'un instantané d'un composant à un moment précis.
Donc principalement instantané versions sont utilisés pour les projets en cours de développement.
Si votre projet dépend d'un composant logiciel qui est en développement actif,
vous pouvez compter sur un instantané de la libération, et Maven sera périodiquement tenter
pour télécharger la dernière instantané à partir d'un référentiel lorsque vous exécutez une version. De même, si
la prochaine version de votre système est en train d'avoir une version “1.8”, votre projet serait
avoir un “1.8-SNAPSHOT” version jusqu'à ce qu'il a été officiellement publié.
Par exemple , la suite de dépendance toujours télécharger la dernière version 1.8 de développement POT de printemps:
Maven
Un exemple de maven processus de libération
C'est comment 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.
Un autre, ce serait le cas:
ce qui signifie que Maven va chercher les mises à jour de ce référentiel. Vous pouvez également spécifier un intervalle de temps pour les mises à jour avec la balise.
Je voudrais faire un point sur la terminologie. Les autres réponses ont donné de bonnes explications sur ce qu'est un "instantané" de la version est dans le contexte de Maven. Mais s'ensuit-il qu'un non-snapshot version devrait être appelé une "libération" de la version?
Il y a une certaine tension entre la sémantique de versioning idée d'une "libération" de la version, qui semble être une version qui n'a pas un qualificatif comme
-SNAPSHOT
mais aussi de ne pas avoir un qualificatif comme-beta.4
; et Maven idée de l'idée d'une "libération" de la version, qui ne semble inclure l'absence de-SNAPSHOT
.En d'autres termes, il y a une sémantique de l'ambiguïté de la présence de "libération" signifie "nous pouvons nous libérer de Maven Central" ou "le logiciel dans sa version finale pour le public". Nous pourrions envisager d'
-beta.4
à une "libération" de la version si nous libérer pour le public, mais ce n'est pas une "version finale". Sémantique gestion des versions dit clairement que quelque chose comme-beta.4
est une "pré-version" version, donc il ne serait pas logique pour qu'il soit appelé à "libérer" version, même sans-SNAPSHOT
. En effet, par définition même-rc.5
est une version candidat, pas une libération réelle, même si l'on peut permettre l'accès du public pour les tests.Donc Maven nonobstant, à mon avis, il me semble plus approprié que d'appeler à "libérer", une version qui n'ont pas de qualificatif, même pas
-beta.4
. Peut-être un meilleur nom pour un Maven non instantané version sera une version "stable" (inspiré par une autre réponse). Ainsi, nous aurions:1.2.3-beta.4-SNAPSHOT
: Une version de capture instantanée d'une pré-version.1.2.3-SNAPSHOT
: Un instantané de la version de la version en cours.1.2.3-beta.4
: Une version stable d'une pré-version.1.2.3
: Une version (qui est stable, non instantané version, évidemment).généralement dans maven, nous avons deux types de builds
1)Instantané construit
2)les versions Release
instantané:les versions de capture est la version spéciale qui indiquent déploiement actuel copie pas comme une version régulière, maven vérifie la version pour chaque version dans le dépôt distant
si l'instantané s'appuie ne sont que des compilations de développement.
Release:Release implique la suppression de l'INSTANTANÉ à la version pour le construire, ce sont les réguliers de construire des versions.
comprendre le contexte de la SDLC aidera à comprendre la différence entre l'instantané et de la libération. Au cours de la dev processus de développeurs contribuent toutes leurs caractéristiques de base de la branche. À un certain point le plomb pense que suffisamment de fonctionnalités ont accumulé, puis il va couper une branche de la ligne de base de la branche. Tout s'appuie avant ce point dans le temps sont des instantanés. Construit poster sur ce point sont communiqués. À noter, les versions release pourrait changer trop avant d'aller en production si un défaut tache pendant les essais de libération.
simplement instantané signifie qu'il s'agit de la version qui n'est pas stable.
lorsque la version comprend instantané comme la version 1.0.0-INSTANTANÉ signifie qu'il n'est pas une version stable et de regarder pour le dépôt distant pour résoudre les dépendances