Cómo crear un arquetipo Maven desde un proyecto existente

Habitualmente, durante el ciclo de vida de los proyectos se desarrollan soluciones, herramientas y configuraciones que pueden ser objeto de reutilizarlos en próximas aventuras.

Para esto, cada equipo (o grupo de equipos gestionados) debe desarrollar un conjunto de elementos que se utilicen repetidamente con el fin de ofrecer productos más sólidos y de mayor calidad o abaratar los costes del desarrollo.

En otras palabras, se desarrolla una pila tecnológica en base a la experiencia y conocimientos adquiridos con la iteración de los proyectos. En Maven, para generar un nuevo proyecto que cumpla con las especificaciones o características propias de esa pila tecnológica utilizamos los arquetipos.

Conceptualmente un arquetipo es básicamente una plantilla. Es decir, un patrón o modelo original desde el que se generarán otros elementos del mismo tipo. En desarrollo nos apoyamos en los arquetipos para reutilizar código y arquitecturas.

El objetivo de este post es obtener un arquetipo Maven desde un proyecto existente y generar otro proyecto desde ese arquetipo para reutilizar código modificado.

Antes de empezar, este es el entorno utilizado para el tutorial:

  • Hardware: Intel® Core™ i7-7500U CPU @ 2.70GHz, 16GB de RAM
  • SO: Ubuntu 16.04 LTS
  • JDK8
  • Maven 3
  • Git 2.7.4

1. Clonar un proyecto ejemplo

Utilizaremos una guía de spring boot: https://github.com/spring-guides/gs-spring-boot

Clonamos el proyecto:

git clone https://github.com/spring-guides/gs-spring-boot.git

Lo probamos:

cd gs-spring-boot/initial/
mvn spring-boot:run

Abrimos un navegador web ¡y listo!

2. Modificar el proyecto

Vamos a modificar el proyecto para que sea nuestro “modelo”. Para ello vamos a cambiar simplemente el mensaje de bienvenida que se encuentra en el archivo ~/gs-spring-boot/initial/src/main/java/hello/HelloController.java.

package hello;

import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;

@RestController
public class HelloController {
    
    @RequestMapping("/")
    public String index() {
        return "Hola arquetipo!!";
    }
    
}

¡Ahora sí!

3. Generar e instalar el arquetipo

Para generar el arquetipo utilizaremos el Maven Archetype Plugin desde command line. El resultado será una plantilla con los mismos archivos del proyecto desde el cual hemos partido.

Lo primero que haremos es crear un archivo de propiedades para definir el Maven GAV (groupId, artifactId, version) para nuestro arquetipo customizado. Para ello crearemos el archivo ~/gs-spring-boot/initial/my_archetype.properties con el siguiente contenido:

archetype.groupId=es.sdos
archetype.artifactId=sdos-custom-archetype
archetype.package=es.sdos.ca
archetype.version=0.0.1
## groupId por defecto para proyectos generados a partir de este arquetipo
groupId=es.sdos
## artifactId por defecto para proyectos generados a partir de este arquetipo
artifactId=sdos-example

Y ejecutamos la siguiente sentencia:

cd ~/gs-spring-boot/initial
mvn clean archetype:create-from-project -Darchetype.properties="my_archetype.properties"

En este momento ya tenemos el proyecto de tipo arquetipo generado con todos los recursos presentes en el proyecto clonado inicialmente y posteriormente modificado. Vamos a instalarlo en el repositorio local:

cd ~/gs-spring-boot/initial/target/generated-sources/archetype/
mvn install

4. Crear un proyecto nuevo

Para crear el proyecto, introducimos las siguientes sentencias:

mkdir /tmp/proyecto-prueba-workspace
cd /tmp/proyecto-prueba-workspace/
mvn archetype:generate -Dfilter=es.sdos:sdos-custom-archetype

La consola entrará en modo interactivo, enumerará la lista de arquetipos encontrados en los repositorios configurados otorgándoles un número ordinal. Por ejemplo:

En nuestro caso, seleccionamos el número 1 o que el que corresponda a es.sdos:sdos-custom-archetype. Ahora, seguirá preguntando las propiedades para el nuevo proyecto. Estas deben ser nuestras repuestas:

  • groupId: es.sdos
  • artifactId: ejemplo
  • version: 0.0.1-SNAPSHOT
  • package: es.sdos (o simplemente pulsamos enter)

En este punto nos solicitará una confirmación. Le decimos que sí (Y).

cd /tmp/proyecto-prueba-workspace/ejemplo/
mvn spring-boot:run

Con esto habríamos concluido. Al abrir el navegador, se desplegará un nuevo proyecto con nuestras modificaciones.

Conclusiones

Después de modificar el código de un proyecto existente, hemos utilizado de manera rápida y eficaz el plugin de Maven Archetype para heredar esas modificaciones a través de un arquetipo.

Realmente, invirtiendo poco tiempo, podemos aprovechar cualquier proyecto disponible para utilizarlo de punto de partida en el futuro.

Puedes encontrar todo el código fuente aquí.


Web Team
ALTEN