Introducción: Conociendo la versión "viva"
\n\nImagina 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?
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\n1. ¿Qué es Maven Snapshot? (Explicación para principiantes)
\n\nEn 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
- 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
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á.
2. ¿Para qué sirve Snapshot? Principales casos de uso
\n\nSnapshot resuelve tres problemas clave en el desarrollo en equipo:
\n\n2.1. Integración continua (CI/CD)
\nImagina 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.
2.2. Dependencias entre módulos dentro de un mismo proyecto
\nEn 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.
2.3. Pruebas de integraciones antes del release
\nSupongamos 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.
3. ¿Cómo se ve un Snapshot en un pom.xml real?
\n\nBasta con agregar el sufijo -SNAPSHOT a la versión. Aquí tienes un ejemplo:
<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\nY así es como conectas un Snapshot de otro proyecto en tu pom.xml:
<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\nTen 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:
mvn clean install -U\n\n\n