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

Resuelto meisam asked hace 13 años • 15 respuestas

Estoy un poco confundido acerca del significado de una instantánea de Maven y por qué construimos una.

meisam avatar May 05 '11 23:05 meisam
Aceptado

Una versión instantánea en Maven es aquella que no se ha publicado.

La idea es que antes de realizar un 1.0lanzamiento (o cualquier otro lanzamiento), exista un archivo 1.0-SNAPSHOT. Esa versión es lo que podría llegar a ser 1.0 . Básicamente está " 1.0en desarrollo". Esto podría estar cerca de un lanzamiento real 1.0, o bastante lejos (justo después del 0.9lanzamiento, por ejemplo).

La diferencia entre una versión "real" y una versión instantánea es que las instantáneas pueden recibir actualizaciones. Eso significa que descargar 1.0-SNAPSHOThoy puede generar un archivo diferente al descargarlo ayer o mañana.

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

Joachim Sauer avatar May 05 '2011 16:05 Joachim Sauer

Las otras tres respuestas le brindan una buena visión de qué -SNAPSHOTes una versión. Solo quería agregar información sobre el comportamiento de Maven cuando encuentra una SNAPSHOTdependencia.

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

Por ejemplo, una foo-1.0.jarbiblioteca se considera una versión estable y, si Maven la encuentra en el repositorio local, la usará para la compilación actual.

Ahora, si necesitas una foo-1.0-SNAPSHOT.jarbiblioteca, 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 repositorios remotos, incluso si se encuentra una versión de esta biblioteca en el repositorio local. Sin embargo, este control se realiza sólo una vez al día. Eso significa que si tiene foo-1.0-20110506.110000-1.jar(es decir, esta biblioteca se generó el 06/05/2011 a las 11:00:00) en su repositorio local, y si ejecuta la compilación de Maven nuevamente el mismo día, Maven no verificará los repositorios. para una versión más nueva.

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

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

donde XXXpuede estar:

  • siempre : Maven buscará una versión más nueva en cada compilación;
  • diario , el valor predeterminado;
  • intervalo:XXX : un intervalo en minutos (XXX)
  • never : Maven nunca intentará recuperar otra versión. Lo hará sólo si no existe localmente. Con la configuración, SNAPSHOTla versión se manejará como las bibliotecas estables.

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

Romain Linsolas avatar May 06 '2011 06:05 Romain Linsolas

El término "INSTANTÁNEA" significa que la compilación es una instantánea de su código en un momento determinado.

Por lo general, significa que esta versión aún está en pleno desarrollo.

Cuando el código esté listo y sea el momento de publicarlo, querrás cambiar la versión que figura en el POM. Luego, en lugar de tener una "INSTANTÁNEA", usarías una etiqueta como "1.0".

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

jjnguy avatar May 05 '2011 16:05 jjnguy