Publicar releases y snapshots

Vamos a explicar cómo crear releases y snapshots. Creamos una release, cuando queremos liberar una nueva versión estable de nuestro proyecto para que el resto de desarrolladores puedan utilizarla. Por otro lado, las snapshots son las distintas versiones de nuestras librerías en desarrollo. Lo normal, es que la creación de snapshots se realice de manera periódica con sistemas de integración continua (como Hudson o Jenkins) que automáticamente compilen el proyecto, pasen las pruebas, desplieguen la aplicación en el entorno de desarrollo y suban las snapshot al repositorio centralizado.

Más adelante hablaremos sobre Jenkins, de momento, vamos a crear las releases y las snapshot de manera manual con Maven.

Un elemento clave que vamos a necesitar, será el sistema de control de versiones SCM (SVN) que permite mantener los cambios de nuestro código fuente. Vamos a describir la creación de releases y snapshot usando Subversión, que es uno de los más utilizados.

Sacar una release

Cuando sacamos una versión del proyecto, hay que realizarla en dos pasos:

1. Prepare, donde Maven realiza las siguientes fases:

  • Comprueba que no hay cambios sin subir al SVN
  • Comprueba que el proyecto no tiene dependencias SNAPSHOT
  • Cambia la versión del POMs de x-SNAPSHOT a la nueva versión
  • Transforma en el pom el parámetro SCM con el destino final del tag
  • Ejecuta los test con las modificaciones de los POMs
  • Hace Commit de los POMs modificados.
  • Crea un Tag con el código en SCM
  • Incrementa la versión del POMs, añade -SNAPSHOT
  • Sube al “trunk” del SCM las modificaciones del pom, para que quede configurado para la próxima versión.

2. Perform, donde Maven realiza las siguientes fases:

  • Se hace checkout del tag que subimos al SCM en el paso anterior
  • Ejecuta los “goals” predefinidos para sacar la release y subirla al repositorio corporativo
Pasos para sacar la Release

Pasos para sacar la Release

Vamos a configurar los plugins necesarios en nuestro pom.xml.

Configuración del subversion

Es necesario indicarle a Maven el path del subversion para que pueda conectarse, crear el tag, etc. Para ello, incluimos en el pom.xml, dentro del nivel <proyect>:

Configuración del maven-release-plugin

Indicamos los “goals” que queremos ejecutar, en este caso, clean install. Los valores indicados en “username” y “password” se sacarán del settings.xml como veremos más adelante. En tagBase, indicamos donde colocar el tag de nuestro proyecto.

Configuración del usuario para el SCM en el settings.xml

Vamos a configurar los parámetros para el usuario y el password del repositorio:

Bien, en principio, para preparar la release, esto es suficiente. Otro tema sería crear la release en el repositorio, cosa que veremos más adelante. Ejecutamos:

Vemos que se produce un error:

Esto se produce, porque no tenemos instalado un cliente de subversión que se pueda ejecutar por línea de comandos. En mi caso tengo instalado el Tortoise, pero parece que no es suficiente. Vamos a instalarlo:

Nos metemos en la página de subversion y buscamos un cliente para windows por linea de comandos. He encontrado  Apache Subversion command line tools, vamos a probar… Lo descomprimimos en una carpeta, y ponemos la ruta al directorio bin del svn, en la variable de sistema “path” del equipo. Tecleamos en una consola:

Comprobando la instalación del cliente svn

Comprobando la instalación del cliente svn

Comprobamos que hemos hecho commit de todos los cambios en nuestro código. Volvemos a ejecutar el comando “mvn release:prepare” y vemos que está todo correcto:

Salida consola Maven

Salida consola Maven

Si examinamos nuestro SCM veremos que efectivamente, nos ha creado el tag.

Maven también nos modifica el pom.xml, incrementado la versión para que la próxima vez que generemos un tag, se cree con el siguiente:

“<version>0.0.2-SNAPSHOT</version>”

Además de eso, se nos crea un fichero release.properties que es necesario para generar posteriormente la release de nuestro proyecto con mvn release:perform (ya se verá esto más adelante). Este fichero contiene la información necesaria para localizar el tag, que se va a instalar. Cuando se ejecute la perform, se eliminará este fichero.

Sacar la nueva release del producto (perform)

La otra “pata” que nos queda, es instalar la versión del proyecto en el repositorio de Maven corporativo donde se guardan las versiones estables de nuestro proyecto. Para ello, necesitamos configurar algunas cosas.

1. Configuramos en el settings.xml un mirror de todos los repositorios que apunte al nuestro repositorio Nexus corporativo:

Si recordamos, estamos apuntando al repositorio de tipo “group” que enlaza con todos los demás repositorios en Nexus. Seguidamente, asociamos el usuario y el password para conectarnos al repositorio:

1.     Configuramos el pom, para que sepa dónde está cada repositorio, el de producción (releases) y el de desarrollo (snapshot).

Ejecutamos en maven, la orden para que cree la release:

Si examinamos en Nexus el repositorio “Releases”, podemos ver que aparece nuestro proyecto.

Release

Release

Sacar un Snapshot

Una vez que hemos configurado todo lo anterior, ejecutamos:

Comprobamos que ha subido la versión al repositorio:

Snapshot en Nexus

Snapshot en Nexus

Dos notas sobre los proyectos multimódulo

Imaginemos un proyecto padre, que contiene un proyecto web y dos módulos. Las dependencias del proyecto web, quedan del siguiente modo:

Como se puede ver, se hace referencia a la versión del proyecto “${project.version}”. Esto no es obligatorio, puede ser un literal, por ejemplo ” <version>0.0.0-SNAPSHOT</version>” y Maven se encargará de actualizarlo en todos los proyectos. Eso si, la versión debe ser la misma en todos.

Como en los proyectos hijo, se hace una referencia al padre, podemos quitar la versión de los proyectos hijo, ya que usa la misma que el padre. De modo que únicamente definimos groupId y artifactId, por ejemplo, el pom del módulo I queda simplemente así:

En el próximo artículo hablaremos sobre como crear un Site con la información de nuestros proyectos.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *