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