Generación de Release con maven-release-plugin

10/06/2016

Maven

Para conseguir nuestro objetivo debemos seguir una serie de pasos:

  • Obtener el código fuente tal cual está
  • Asociarle una versión (probablemente eliminado el subfijo -SNAPSHOT) de modo que pueda ser identificado unívocamente
  • Construir y probar
  • Etiquetar este estado en el SCM para que pueda ser asociado con el artefacto correspondiente
  • Asociar una nueva versión de desarrollo (probablemente subiendo el número de versión y añadiendo el subfijo -SNAPSHOT)
  • Subir el cambio de versión de desarrollo al SCM
  • Obtener el código fuente de la versión etiquetada
  • Construir, probar y empaquetar
  • Desplegar en un repositorio de artefactos donde pueda ser recuperado para su instalación

Bastante sencillo, no?

Guía detallada

Traslademos esto al mundo Subversion y Maven con el maven-release-plugin:

  1. Obtener del código fuente (en el ejemplo se utiliza el código fuente del proyecto “myproject”):
    svn checkout https://subversion.assembla.com/svn/myproject/trunk myproject
  2. Asociarle una versión final (en el ejemplo la versión 1.1.0), construir, probar, subir POM con versión final al SCM (y con información SCM actualizada a scm:svn:https://subversion.assembla.com/svn/myproject/tags/1.1.0) , etiquetar versión final, asociarle una nueva versión de desarrollo (en el ejemplo la versión 1.2.0-SNAPSHOT), subir la nueva versión de desarrollo al trunk:
    mvn release:prepare -DreleaseVersion=1.1.0 -DdevelopmentVersion=1.2.0-SNAPSHOT
  3. Recuperar el código fuente de la versión final, construir, probar, empaquetar y desplegar en el repositorio (utiliza el fichero release.properties generado durante la fase release:prepare):
    mvn release:perform

Para que todo esto funcione, el proyecto Maven debe tener configurados correctamente los plugins versions-maven-plugin y maven-scm-plugin de manera similar a la siguiente:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
...
     <!-- =======================================================================
          Build ======================================================================= -->
     <build>
          <plugins>
               <!-- http://maven.apache.org/maven-release/maven-release-plugin -->
               <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-release-plugin</artifactId>
                    <version>2.5.1</version>
                    <configuration>
                         <autoVersionSubmodules>true</autoVersionSubmodules>
                         <tagNameFormat>@{project.version}</tagNameFormat>
                         <goals>deploy</goals>
                    </configuration>
               </plugin>
         </plugins>
     </build>
...
     <!-- =======================================================================
          Source Control Management system =================================================== -->
     <scm>
          <connection>scm:svn:https://subversion.assembla.com/svn/myproject/trunk</connection>
          <developerConnection>scm:svn:https://subversion.assembla.com/svn/myproject/trunk</developerConnection>
          <url>https://subversion.assembla.com/svn/myproject/trunk</url>
     </scm>
...
</project>

 

Atención

El problema de esta solución es que realiza la construcción (y test) del mismo artefacto dos veces.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: