Maven Snapshot: qué es y para qué sirve? Explicación para principiantes

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción: Conociendo la versión "viva"

\n\n

Imagina que trabajas en un gran proyecto Java compuesto por una docena de módulos. Un módulo (por ejemplo, core-api) está siendo mejorado constantemente por otro desarrollador. Quieres usar sus últimos avances, pero el release oficial (1.0.0) no saldrá hasta dentro de un mes. ¿Qué hacer? ¿Esperar? ¿Copiar el código? ¿Ir con tu colega y pedirle que compile un archivo JAR?

\n\n

Aquí es donde entra en juego Maven Snapshot — una versión especial de un artefacto que siempre contiene la compilación más reciente. En este artículo, explicaremos qué es Snapshot en términos simples, en qué se diferencia de un release normal y por qué ningún proyecto Java moderno puede prescindir de él.

\n\n

1. ¿Qué es Maven Snapshot? (Explicación para principiantes)

\n\n

En el mundo de Maven, cada artefacto (biblioteca, módulo) tiene tres coordenadas: groupId, artifactId y version. La versión puede ser de dos tipos:

\n\n
    \n
  • Release — una versión fija y estable (por ejemplo, 1.0.0, 2.3.1). Nunca cambia.
  • \n
  • Snapshot — una versión "viva" y modificable (por ejemplo, 1.0.0-SNAPSHOT, 2.0.0-SNAPSHOT). Es un borrador que puede actualizarse cada vez que se compila.
  • \n
\n\n

La idea principal: Snapshot siempre apunta a la versión más reciente del código en la rama de desarrollo. Si agregas una dependencia a 1.0.0-SNAPSHOT, Maven verificará en cada compilación si ha aparecido una nueva versión de ese snapshot y la descargará.

\n\n

2. ¿Para qué sirve Snapshot? Principales casos de uso

\n\n

Snapshot resuelve tres problemas clave en el desarrollo en equipo:

\n\n

2.1. Integración continua (CI/CD)

\n

Imagina que tu servidor CI (Jenkins, GitLab CI) compila el proyecto cada 5 minutos. Si usas versiones normales, tendrías que cambiar manualmente el número de versión cada minuto. Con Snapshot no es necesario — la versión 1.0.0-SNAPSHOT siempre será la más reciente.

\n\n

2.2. Dependencias entre módulos dentro de un mismo proyecto

\n

En proyectos multimódulo (por ejemplo, backend, frontend-api, common), los módulos a menudo se referencian entre sí. Mientras el desarrollo está activo, es conveniente usar dependencias SNAPSHOT — obtienen automáticamente los últimos cambios.

\n\n

2.3. Pruebas de integraciones antes del release

\n

Supongamos que el equipo A desarrolla la biblioteca auth-lib y el equipo B la utiliza. El equipo A publica auth-lib:2.0.0-SNAPSHOT, el equipo B agrega esta dependencia y ve inmediatamente los nuevos métodos. Si algo se rompe, se puede revertir rápidamente a un release estable.

\n\n

3. ¿Cómo se ve un Snapshot en un pom.xml real?

\n\n

Basta con agregar el sufijo -SNAPSHOT a la versión. Aquí tienes un ejemplo:

\n\n
<project>\n    <modelVersion>4.0.0</modelVersion>\n    <groupId>com.pythonlib</groupId>\n    <artifactId>my-utils</artifactId>\n    <version>1.0.0-SNAPSHOT</version>  <!-- Esto es un Snapshot -->\n    <packaging>jar</packaging>\n</project>\n
\n\n

Y así es como conectas un Snapshot de otro proyecto en tu pom.xml:

\n\n
<dependencies>\n    <dependency>\n        <groupId>com.otherteam</groupId>\n        <artifactId>auth-lib</artifactId>\n        <version>2.0.0-SNAPSHOT</version>\n    </dependency>\n</dependencies>\n
\n\n

Ten en cuenta: Maven no almacenará en caché un Snapshot para siempre de forma predeterminada. Verifica las actualizaciones una vez al día (por defecto). Pero puedes forzarlo a actualizar todas las dependencias Snapshot con la bandera -U:

\n\n
mvn clean install -U\n
\n\n

4. Snapshot vs Release: diferencias clave

Blogs

Book Recommendations