Creacion de Arquetipos Personalizados

De Dos Ideas.
Revisión del 15:28 25 mar 2010 de 201.251.182.130 (discusión) (Estructura de archetype-metadata.xml)
Saltar a: navegación, buscar

Estructura de un arquetipo

El arquetipo se implementa a través de un proyecto Maven y tiene una estructura básica bastante sencilla.

 arquetipo-personalizado
 |-- pom.xml
 `-- src
     `-- main
         `-- resources
             |-- META-INF
             |    `—maven
             |        |-- archetype.xml (deprecado)
             |        `-- archetype-metadata.xml
             `-- archetype-resources
                  |-- pom.xml
                  `-- ...

En el archivo pom.xml en el raiz del proyecto se configuran solamente los datos básicos, como el nombre del arquetipo y el paquete al que pertenece. Luego utilizaremos estos datos durante el proceso de creación de un proyecto nuevo.

En la carpeta maven se ubica el archivo de estructura del proyecto archetype-metadata.xml en el cual se configuran los archivos que se van a copiar durante el proceso de creación del proyecto. Ademas se pueden los submódulos que contiene el proyecto, en caso que el proyecto sea multimódulo.

La carpeta archetype-resources contiene todos los archivos y la estructura de carpetas a utilizar durante el proceso de creación.

archetype-metadata.xml

El arquetipo multimódulo es el más complejo y completo de todos, por lo que se elaboró uno a nivel de ejemplo. El siguiente arquetipo define un módulo padre, que a su vez contiene un submódulo, de tipo librería (cuyo generado es un archivo Jar)

 <?xml version="1.0" encoding="UTF-8"?>
 <archetype-descriptor name="multi-module">
 <fileSets>
     <fileSet filtered="true" packaged="false">
       <directory></directory>
       <includes>
         <include>pom.xml</include>
       </includes>
     </fileSet>
   </fileSets>
   <modules>
     <module id="${rootArtifactId}-LibModule" dir="__rootArtifactId__-LibModule">
       <fileSets>
         <fileSet filtered="true" packaged="true">
           <directory>src/main/java</directory>
           <includes>
             <include>**/*</include>
           </includes>
         </fileSet>
         <fileSet filtered="true" packaged="true">
           <directory>src/test/java</directory>
           <includes>
             <include>**/*</include>
           </includes>
         </fileSet>
         <fileSet filtered="true" packaged="true">
           <directory>src/main/resources</directory>
           <includes>
             <include>**/*</include>
           </includes>
         </fileSet>
         <fileSet filtered="true" packaged="true">
           <directory>src/test/resources</directory>
           <includes>
             <include>**/*</include>
           </includes>
         </fileSet>
         <fileSet filtered="true" packaged="false">
           <directory></directory>
           <includes>
             <include>pom.xml</include>
           </includes>
         </fileSet>
       </fileSets>
     </module>
 </archetype-descriptor>


archetype-resources

Instalación del arquetipo

Para poder usar el arquetipo va a ser necesario primero instalarlo en el repositorio de código. Para ello hay que ejecutar:

 mvn clean install

Nota: el comando clean no es necesario, pero puede evitarnos dolores de cabeza en caso que haya algún problema, al garantizar que se elimina la versión anterior del arquetipo.

Creación de proyecto usando el arquetipo

Para generar un proyecto nuevo utilizaremos la tarea archetype:generate a la cual se pasaremos los siguientes parámetros:

  • archetypeGroupId: Nombre del paquete de arquetipos que vamos a utilizar
  • archetypeArtifactId: Nombre del arquetipo
  • archetypeVersion: Versión del arquitipo
  • groupId: Paquete a utilizar en el proyecto nuevo
  • artifactId: Nombre del proyecto
  • version: Versión del proyecto

La tarea archetype:generate en caso que no se le pasen parámetros solicitará los mismos de forma interactiva y antes de terminar el proceso solicitará una confirmación. En caso que se desee anular este comportamiento, se le puede pasar el parámetro extra:

  • interactiveMode=false

Ejemplo:

 mvn archetype:generate -DarchetypeGroupId=com.dosideas -DarchetypeArtifactId=dosideas-archetype-javaee -DarchetypeVersion=1.0-SNAPSHOT -DgroupId=com.dosideas.maven -DartifactId=helloworld -Dversion=1.0 -DinteractiveMode=false

Nota: la tarea archetype:generate reemplaza a la anterior tarea archetype:create la cual no debe ser utilizada porque carece de las opciones más avanzadas que se utilizan en los últimos plugins.