Generando Artifact en Maven

Hay veces, que tenemos un proyecto/modulo montado con una arquitectura que nos mola y queremos reutilizar en otros proyectos.

Para ello Maven, permite generar artifacts a partir de un proyecto existente. De forma que cuando querramos generar un proyecto nuevo , podamos especificarle ese artifact y esto nos generara un proyecto ya pre-configurado por nosotros. (La verdad, esto es la caña).

Asi que vamos al proyecto que queremos "templatizar" . Lo primero es limpiarlo bien,
por ejemplo quitar las clases que no queramos, quitar los archivos de configuracion de eclipse (mvn eclipse:clean )   u otro tipo de archivos residuales que siempre se nos quedan por ahi.....


GENERANDO EL ARTIFACT A PARTIR DEL PROYECTO

En la raiz del proyecto ejecutamos:
mvn archetype:create-from-project

Maven empieza a hacer su "magia" y nos genera el siguiente directorio:
\target\generated-sources
Ahi dentro  tenemos una carpeta que contiene el artifact. (Maven te genera la estructura del artifact ahi dentro, pero todavia no hemos hecho nada, necesitaremos mas adelante instalarlo en nuestro repositorio (local/remoto) para tenerlo disponible para crear proyectos.Vemos que tiene la estructura de un proyecto normal maven.

En la carpeta  \target\generated-sources\archetype\src\main\resources\META-INF\maven
se crea la info del artifact y el fichero "archetype-metadata.xml" que contiene la configuracion de como se generará el artifact. Si lo abrimos podemos ver, que define los directorios base para los proyectos maven (es decir la carpeta src/main/java y la  /test.  Este fiehero se puede editar por si queremos excluir alguna extension de archivo y cosas asi).



INSTALANDO EL ARTIFACT EN NUESTRO REPO
Vamos a la raiz del artifact \target\generated-sources\archetype (aqui esta el pom.xml del arfifact).
Para instalarlo hacemos como un modulo normal de Maven:

mvn clean install
Con esto ya lo tenemos disponible en nuestro repo.
Tambien puedes instalarlo en otra maquina centralizada, copiando el artifact en la maquina y ejecutando la misma instruccion . (O haciendo un deploy tambien)

GENERANDO EL NUEVO MODULO A PARTIR DEL NUEVO ARTIFACT

Vamos una carpeta nueva donde querramos generar el modulo, como si se tratase de un proyecto normal.
La unica salvedad es que para instalar a partir de los artifacts que tenemos en el repo local debemos ejecutar lo siguiente:

mvn archetype:generate -DarchetypeCatalog=local

En caso de repositorio no local

-DarchetypeRepository=http://url_del_repo_remoto  -DarchetypeCatalog=remote



Ahora maven comenzara a generar el proyecto, y lo primero que hace es sacarnos una lista de los artifacts que tenemos disponibles en nuestro repo local
(Si tienes varios, cada uno lo sacara con un numero )
Seleccionamos el que queremos usar.

Luego nos preguntara  el groupId para el nuevo proyecto y demas propiedades para generarlo:

groupId: org.mycompany
artifactId: NuevoProyectoDesdePlantilla
version:1.0-SNAPSHOT
package:org.mycompany.nombreModulo


confirmamos todo con "Y", y vemos como se genera el proyecto como si fuera un modulo normal de maven.

Nos crea la carpeta /NuevoProyectoDesdePlantilla  y dentro veremos la estructura generada.

Podemos ver, que el pom.xml ha respetado las cosas del nuestra plantilla (artifact) y que ha cambiado las propiedades genericas del modulo con las que le especificamos en la creacion, es decir el groudId, el ArtifatId, la version...

Si teniamos clases dentro del proyecto, vemos que nos ha cambiado la declaracion de paquetes respecto a la nueva estructura, etc.....

Y asi podemos "Plantillizar" cualquien proyecto del que querramos rehusar en el futuro.


Si quereis mas info, este post esta bastante mas completo:

http://code.google.com/p/jianwikis/wiki/HowToCreateMavenArchetypeFromProject







Comentarios

Publicar un comentario

Entradas populares de este blog

Subir campos Blob a BBDD (Oracle) con Java

Reiniciar usuario de SVN Subversion

Cucumber y Java - definiendo test de una manera amigable