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
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
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
Esta genial!
ResponderEliminar