¿Qué es exactamente una instantánea de Maven y por qué la necesitamos?

Estoy un poco confundido sobre el significado de una instantánea Maven y por qué construimos una?

Una versión de instantánea en Maven es una que no se ha lanzado.

La idea es que antes de que se realice una versión 1.0 (o cualquier otra versión), existe un 1.0-SNAPSHOT . Esa versión es lo que podría convertirse en 1.0 . Básicamente es ” 1.0 en desarrollo”. Esto podría estar cerca de una versión real 1.0 , o bastante lejos (justo después de la versión 0.9 , por ejemplo).

La diferencia entre una versión “real” y una versión de instantánea es que las instantáneas pueden recibir actualizaciones. Eso significa que la descarga de 1.0-SNAPSHOT hoy podría dar un archivo diferente a la descarga de ayer o mañana.

Por lo general, las dependencias de instantáneas solo deberían existir durante el desarrollo y ninguna versión lanzada (es decir, ninguna instantánea que no sea instantánea) debería tener una dependencia en una versión de instantánea.

Las otras tres respuestas le proporcionan una buena visión de lo que es una versión -SNAPSHOT . Solo quería agregar algo de información sobre el comportamiento de Maven cuando encuentra una dependencia SNAPSHOT .

Cuando construyes una aplicación, Maven buscará dependencias en el repository local . Si no se encuentra una versión estable allí, buscará en los repositorys remotos (definidos en settings.xml o pom.xml ) para recuperar esta dependencia. Luego, lo copiará en el repository local, para que esté disponible para las próximas comstackciones.

Por ejemplo, una biblioteca foo-1.0.jar se considera como una versión estable , y si Maven la encuentra en el repository local, usará esta para la comstackción actual.

Ahora, si necesita una biblioteca foo-1.0-SNAPSHOT.jar , Maven sabrá que esta versión no es estable y está sujeta a cambios. Es por eso que Maven intentará encontrar una versión más nueva en los repositorys remotos, incluso si se encuentra una versión de esta biblioteca en el repository local. Sin embargo, este control se realiza solo una vez por día. Eso significa que si tiene un foo-1.0-20110506.110000-1.jar (es decir, esta biblioteca se ha generado el 2011/05/06 a las 11:00:00) en su repository local, y si ejecuta la comstackción Maven de nuevo, el el mismo día, Maven no revisará los repositorys para una versión más nueva.

Maven le proporciona una forma de cambiar esta política de actualización en su definición de repository:

  foo-repository ...  true XXX   

donde XXX puede ser:

  • siempre : Maven buscará una versión más nueva en cada comstackción;
  • diariamente , el valor predeterminado;
  • intervalo: XXX : un intervalo en minutos (XXX)
  • nunca : Maven nunca intentará recuperar otra versión. Hará eso solo si no existe localmente. Con la configuración, la versión SNAPSHOT se manejará como las bibliotecas estables.

(el modelo de settings.xml se puede encontrar aquí)

El término “SNAPSHOT” significa que la comstackción es una instantánea de su código en un momento dado.

Por lo general, significa que la versión es una versión aún en desarrollo.

Cuando llega el momento de lanzar su código, querrá cambiar la versión que figura en el pom. Entonces, en lugar de tener un “SNAPSHOT” tendrías algo así como “1.0”.

Para obtener ayuda con el control de versiones, consulte la especificación de Versiones semánticas .

Un “lanzamiento” es la construcción final para una versión que no cambia.

Una “instantánea” es una construcción que puede ser reemplazada por otra versión que tenga el mismo nombre. Esto implica que la construcción podría cambiar en cualquier momento y aún está en desarrollo activo.

Tiene diferentes artefactos para diferentes comstackciones basadas en el mismo código. Por ejemplo, puede tener uno con la depuración y otro sin él. Uno para Java 5.0 y otro para Java 6. En general, es más sencillo tener una comstackción que hace todo lo que necesita. 😉

Las versiones de Maven pueden contener una cadena literal “SNAPSHOT” para indicar que un proyecto se encuentra actualmente en desarrollo activo.

Por ejemplo, si su proyecto tiene una versión de “1.0-SNAPSHOT” y usted implementa los artefactos de este proyecto en un repository de Maven, Maven expandiría esta versión a “1.0-20080207-230803-1” si tuviera que desplegar un lanzamiento a las 11 : 8 PM el 7 de febrero de 2008 UTC. En otras palabras, cuando despliega una instantánea, no está haciendo una versión de un componente de software; está publicando una instantánea de un componente en un momento específico.

Por lo tanto, principalmente las versiones de instantáneas se utilizan para proyectos en desarrollo activo. Si su proyecto depende de un componente de software que esté en desarrollo activo, puede depender de una versión de instantánea y Maven intentará periódicamente descargar la última instantánea de un repository cuando ejecute una comstackción. Del mismo modo, si la próxima versión de su sistema va a tener una versión “1.8”, su proyecto tendrá una versión “1.8-SNAPSHOT” hasta que se lance formalmente.

Por ejemplo, la siguiente dependencia siempre descargaría el último 1.8 JAR de desarrollo de la spring:

   org.springframework spring 1.8-SNAPSHOT”  

Maven

Un ejemplo del proceso de lanzamiento de maven

enter image description here

Así es como se ve una instantánea para un repository y en este caso no está habilitada, lo que significa que el repository al que se hace referencia aquí es estable y no hay necesidad de actualizaciones.

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

Otro caso sería por:

  true  

lo que significa que Maven buscará actualizaciones para este repository. También puede especificar un intervalo para las actualizaciones con etiqueta.

Usualmente en Maven tenemos dos tipos de comstackciones 1) comstackciones de instantáneas 2) comstackciones de versiones

  1. comstackciones instantáneas: SNAPSHOT es la versión especial que indica que la copia de implementación actual no es como una versión normal, maven verifica la versión para cada comstackción en el repository remoto, por lo que las comstackciones de instantáneas no son más que construcciones de mantenimiento.

  2. Versiones de lanzamiento: Liberar significa eliminar SNAPSHOT en la versión para la construcción, estas son las versiones de comstackción habituales.

    Intereting Posts