martes, 6 de octubre de 2009

Hacer un release de un proyecto con Maven

A la hora de hacer un release de un proyecto que estamos gestionando con Maven y Subversion podemos seguir los siguientes pasos:
  • Cambiar la versión en el pom.xml del proyecto y quitar la etiqueta SNAPSHOT.
  • Hacer commit del pom.xml.
  • Etiquetar la versión del código en el repositorio de Subversion.
  • Cambiar la version en el pom.xml para dejar la siguiente versión: 0.0.2-SNAPSHOT.
  • Hacer commit de los pom.xml.

Si además, en vez de sólo uno, tenemos varios proyectos, el trabajo se multiplica.

Para simplificar estas tareas, se puede hacer uso de un plugin de Maven, el Maven Release Plugin. Para ello, primero debemos configurar las propiedades del sistema de control de versiones que estamos usando. Esto se hace en el bloque scm del pom.xml:
<scm>
<url>svn://localhost/trunk/SimpleProject</url>
<developerConnection>
scm:svn:svn://localhost/trunk/SimpleProject
</developerConnection>
</scm>

Ahora, incluimos en el pom.xml del proyecto la configuración para el Maven Release Plugin. Vamos a indicar en que ruta se deben dejar los etiquetas de las releases que realicemos:
<project>

<build>
<plugins>

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.0-beta-7</version>
<configuration>
<tagBase>svn://localhost/tags/releases</tagBase>
</configuration>
</plugin>

</plugins>
</build>

</project>

A la hora de hacer la release he experimentado fallos relacionados con el directorio target, puesto que este es un directorio que se elimina cada vez que se hace un clean, lo cual genera conflictos entre las versiones del proyecto en Subversion. Puesto que es un directorio cuyo contenido se genera automáticamente en la fase de construcción del proyecto, no es necesario que lo incluyamos en el sistema de control de versiones. Vamos a indicar en Eclipse que este directorio sea ignorado por Subversion, desde la ventana Preferences:

En este momento, ya se podría hacer una release del proyecto mediante el siguiente comando que se ejecutaría dentro del directorio del proyecto:
mvn -Djorge=jorgepassword release:clean release:prepare

La ejecución de este comando nos preguntará por la versión de la release que estamos realizando, por el nombre de la etiqueta para esta release y por la siguiente versión del proyecto después de esta release. En nuestro caso, dejaremos las opciones por defecto:
What is the release version for 
"Unnamed - com.roldan:SimpleProject:jar:0.0.2-SNAPSHOT"?
(com.roldan:SimpleProject) 0.0.2: :
What is SCM release tag or label for
"Unnamed - com.roldan:SimpleProject:jar:0.0.2-SNAPSHOT"?
(com.roldan:SimpleProject) SimpleProject-0.0.2: :
What is the new development version for
"Unnamed - com.roldan:SimpleProject:jar:0.0.2-SNAPSHOT"?
(com.roldan:SimpleProject) 0.0.3-SNAPSHOT: :

Al finalizar, habremos creado la release del proyecto:

Referencias:
http://maven.apache.org/plugins/maven-release-plugin/index.html
http://weblogs.java.net/blog/2008/08/31/using-maven-release-plugin
http://jmbeas.blogspot.com/2009/03/versionado-automatico-con-maven.html

1 comentario:

  1. Significado de esas 3 preguntas:

    1) Release que creamos en Local, se usará para el despliegue
    2) Version que se le da al nuevo Branch o Tag en el repo remoto.
    3) Version que se deja en local y en la rama asociada en el repo remoto.

    ResponderEliminar