Guía del arquetipo de Maven

1. Información general

Un arquetipo de Maven es una abstracción de una especie de proyecto que se puede instanciar en un proyecto concreto de Maven personalizado. En resumen, es una plantilla de proyecto a partir de la cual se crean otros proyectos .

El principal beneficio de usar arquetipos es estandarizar el desarrollo de proyectos y permitir a los desarrolladores seguir fácilmente las mejores prácticas mientras inician sus proyectos más rápido.

En este tutorial, veremos cómo crear un arquetipo personalizado y luego cómo usarlo para generar un proyecto Maven a través del complemento maven-archetype-plugin.

2. Descriptor de arquetipo de Maven

El descriptor de arquetipo de Maven es el corazón del proyecto de arquetipo . Es un archivo XML llamado archetype-metadata.xml y se encuentra en el directorio META-INF / maven del jar.

Se utiliza para describir los metadatos de los arquetipos:

   bar     src/main/java  **/*.java       

La etiqueta requiredProperties se utiliza para proporcionar propiedades durante la generación del proyecto. Por lo tanto, se nos pedirá que proporcionemos valores para ellos, con la opción de aceptar el valor predeterminado.

fileSets, por otro lado, se utilizan para configurar qué recursos se copiarán en el proyecto generado concreto. Un archivo filtrado significa que los marcadores de posición se sustituirán por los valores proporcionados durante el proceso de generación.

Y, al usar packaged = ”true” en el fileSet , estamos diciendo que los archivos seleccionados se agregarán a la jerarquía de carpetas especificada por la propiedad del paquete .

Si queremos generar un proyecto de varios módulos, entonces los módulos de etiquetas pueden ayudar a configurar todos los módulos del proyecto generado.

Tenga en cuenta que este archivo trata sobre el arquetipo 2 y superior. En la versión 1.0.x, el archivo se llamaba simplemente archetype.xml y tenía una estructura diferente.

Para obtener más información, definitivamente eche un vistazo a los documentos oficiales de Apache.

3. Cómo crear un arquetipo

Un arquetipo es un proyecto normal de Maven con el siguiente contenido adicional :

  • src / main / resources / archetype-resources es la plantilla desde la que se copian los recursos en el proyecto recién creado
  • src / main / resources / META-INF / maven / archetype-metadata.xml : es el descriptor utilizado para describir los metadatos de los arquetipos

Para crear un arquetipo manualmente, podemos comenzar con un proyecto Maven recién creado y luego podemos agregar los recursos mencionados anteriormente.

O podemos generarlo usando archetype-maven-plugin y luego personalizar el contenido del directorio archetype-resources y el archivo archetype-metadata.xml .

Para generar el arquetipo, podemos usar:

mvn archetype:generate -B -DarchetypeArtifactId=maven-archetype-archetype \ -DarchetypeGroupId=maven-archetype \ -DgroupId=com.baeldung \ -DartifactId=test-archetype

También podemos crear el arquetipo a partir de un proyecto Maven existente:

mvn archetype:create-from-project

Se genera en destino / fuentes-generadas / arquetipo, listo para ser utilizado.

No importa cómo hayamos creado el arquetipo, terminaremos con la siguiente estructura:

archetype-root/ ├── pom.xml └── src └── main ├── java └── resources ├── archetype-resources │   ├── pom.xml │   └── src └── META-INF └── maven └── archetype-metadata.xml

Ahora podemos comenzar a construir nuestro arquetipo colocando recursos en el directorio archetype-resources y configurándolos en el archivo archetype-metadata.xml .

4. Construyendo el arquetipo

Ahora estamos listos para personalizar nuestro arquetipo. Para lo más destacado de este proceso, mostraremos la creación de un arquetipo de Maven simple para generar una aplicación RESTful basada en JAX-RS 2.1.

Llamémoslo simplemente maven-arquetipo .

4.1. Embalaje de arquetipos

Comencemos por modificar el pom.xml del proyecto arquetipo ubicado en el directorio maven-archetype :

maven-archetype

Este tipo de embalaje está disponible gracias a la extensión arquetipo-embalaje :

   org.apache.maven.archetype archetype-packaging 3.0.1    

4.2. Añadiendo el pom.xml

Creemos ahora un archivo pom.xml ubicado en el directorio archetype-resources :

 ${groupId} ${artifactId} ${version} war   javax.ws.rs javax.ws.rs-api 2.1 provided   

Como podemos ver, groupId, artifactId y version están parametrizados. Serán reemplazados durante la creación de un nuevo proyecto a partir de este arquetipo.

Podemos poner todo lo que necesita el proyecto generado, como dependencias y complementos, en el archivo pom.xml . Aquí, hemos agregado la dependencia JAX RS ya que el arquetipo se usará para generar una aplicación basada en RESTful.

4.3. Adición de recursos necesarios

A continuación, podemos agregar algo de código Java para nuestra aplicación en archetype-resources / src / main / java .

Una clase para configurar la aplicación JAX-RS:

package ${package}; // import @ApplicationPath("${app-path}") public class AppConfig extends Application { }

Y una clase para un recurso de ping:

@Path("ping") public class PingResource{ //... }

Finalmente, coloque el archivo de configuración del servidor, server.xml , en archetype-resources / src / main / config / liberty .

4.4. Configurar metadatos

Después de agregar todos los recursos necesarios, ahora podemos configurar cuáles se copiarán durante la generación a través del archivo archetype-metadata.xml .

Podemos decirle a nuestro arquetipo que queremos que se copien todos los archivos fuente de Java:

    src/main/java  **/*.java    src/main/config/liberty  server.xml    

Aquí, queremos que se copien todos los archivos Java del directorio src / main / java y el archivo server.xml de src / main / config / liberty .

4.5. Instalación del arquetipo

Ahora que hemos terminado de ponerlo todo junto, podemos instalar el arquetipo invocando este comando:

mvn install

En este punto, el arquetipo se registra en el archivo archetype-catalog.xml, ubicado en el repositorio local de Maven y, por lo tanto, está listo para su uso.

5. Uso del arquetipo instalado

El arquetipo maven-plugin permite al usuario crear un proyecto Maven a través de la generan meta y arquetipo existente . Para obtener más información sobre este complemento, puede visitar la página de inicio.

Este comando usa este complemento para generar un proyecto Maven a partir de nuestro arquetipo:

mvn archetype:generate -DarchetypeGroupId=com.baeldung.archetypes -DarchetypeArtifactId=maven-archetype -DarchetypeVersion=1.0-SNAPSHOT -DgroupId=com.baeldung.restful -DartifactId=cool-jaxrs-sample -Dversion=1.0-SNAPSHOT

Luego deberíamos pasar el GAV de nuestro arquetipo como argumentos al maven-archetype-plugin: generate goal. También podemos pasar los GAV del proyecto concreto que queramos generar, de lo contrario, podemos proporcionarlos en modo interactivo.

Por lo tanto, el proyecto generado de concreto cool-jaxrs-sample está listo para ejecutarse sin ningún cambio. Entonces, podemos ejecutarlo simplemente invocando este comando:

mvn package liberty:run

Luego podemos acceder a esta URL:

//localhost:9080/cool-jaxrs-sample//ping

6. Conclusión

En este artículo, mostramos cómo construir y usar un arquetipo de Maven.

Hemos demostrado cómo crear el arquetipo y luego cómo configurar los recursos de la plantilla a través del archivo archetype-metadata.xml .

El código, como de costumbre, se puede encontrar en Github.