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.