Generación de Release con versions-maven-plugin y maven-scm-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, probar y empaquetar
  • Desplegar en un repositorio de artefactos donde pueda ser recuperado para su instalación
  • 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)
  • Construir y probar
  • Subir el cambio de versión de desarrollo al SCM

Bastante sencillo, no?

Guía detallada

Traslademos esto al mundo Subversion y Maven:

  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):
    mvn versions:set -DnewVersion=1.1.0
  3. Construir, probar, empaquetar y desplieguar en el repositorio de artefactos:
    mvn deploy
  4. Etiquetar en el SCM:
    mvn scm:tag
  5. Asociarle una nueva versión de desarrollo (en el ejemplo la versión 1.2.0-SNAPSHOT):
    mvn versions:set -DnewVersion=1.2.0-SNAPSHOT
  6. Construir y probar
    mvn test
  7. Subir la nueva versión de desarrollo al trunk
    mvn scm:checkin

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://mojo.codehaus.org/versions-maven-plugin -->
               <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>versions-maven-plugin</artifactId>
                    <version>2.1</version>
                    <configuration>
                        <generateBackupPoms>false</generateBackupPoms>
                    </configuration>
               </plugin>
               <!-- https://maven.apache.org/scm/maven-scm-plugin/ -->
               <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-scm-plugin</artifactId>
                    <version>1.9.4</version>
                    <configuration>
                        <connectionType>developerConnection</connectionType>
                         <tag>${project.version}</tag>
                         <branch>${project.version}</branch>
                    </configuration>
               </plugin>
         </plugins>
     </build>
...
     <!-- =======================================================================
          Source Control Management system =================================================== -->
     <scm>
          <developerConnection>scm:svn:https://subversion.assembla.com/svn/myproject/trunk</developerConnection>
     </scm>
...
</project>

Atención

El problema de esta solución es que el apartado “scm” del POM, en el tag, no queda actualizado y sigue apuntando al trunk.

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: