multi módulo
A menudo tenemos un proyecto compuesto de varios módulos, por ej., un EAR que engloba un WAR, un JAR con el modelo de datos o con EJBs, configuraciones, etc. Cada uno de éstos constituye un proyecto en sí – tiene su propio pom.xml y se importa aparte en el IDE.
Ésto puede ser difícil de manejar en cuanto a estar descargando varios proyectos del control de versiones, tener que estarlos construyendo en orden si es por fuera del IDE, etc.
Por suerte Maven parece soportar esta situación >>.
Veamos.
compilación
La idea es tener un proyecto padre cuyo packaging es pom, y que lista como módulosa los demás proyectos. Éstos se deben encontrar en subdirectorios del proyecto padre para que los encuentre
\- Padre |--pom.xml |--Hijo1 |--pom.xml |--src/ |--Hijo2 |--pom.xml |--src
Padre/pom.xml >>
<modelVersion>4.0.0</modelVersion></p> <groupId>com.numerica.multimodulo</groupId> <artifactId>Padre</artifactId> <version>1</version> <packaging>pom</packaging></p> <modules> <module>Hijo1</module> <module>Hijo2</module> </modules>
Hijo1/pom.xml >>
<modelVersion>4.0.0</modelVersion></p> <parent> <groupId>com.numerica.multimodulo</groupId> <artifactId>Padre</artifactId> <version>1</version> </parent></p> <artifactId>Hijo1</artifactId> <packaging>war</packaging></p> <dependencies> <!--etc-->
Si bien no me convence la idea que los proyectos estén unos dentro de otros en vez de uno al lado del otro en el workspace, ésto ya permite compilarlos todos juntos
mvn clean install
(usa Reactor >> para resolver en que órden compilar en función de las dependencias, etc.)
[INFO] ------------------------------------------------------------------------ [INFO] Reactor Summary: [INFO] [INFO] U-Padre ......................................... SUCCESS [0.531s] [INFO] Hijo1 ......................................... SUCCESS [4.321s] [INFO] Hijo2 ......................................... SUCCESS [6.202s] [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 14.425s [INFO] Finished at: Fri Dec 07 10:58:33 CLST 2012 [INFO] Final Memory: 36M/293M [INFO] ------------------------------------------------------------------------
además de unificar el nombre de las versiones, paquetes, y probablemente también repositorios, etc. (de hecho se pueden dejar dependencias compartidas)
Retiro lo dicho, si lo reimportamos Eclipse sí trata cada proyecto por separado, así es que en teoría ¿se podría hacer un solo proyecto en svn también?
De hecho, Eclipse comprende que es un solo EAR y éso es lo que ofrece para deploy a JBoss, así es que todo bien hasta aquí.
control de versiones
También quisiera poder bajar de un repositorio SVN todos los proyectos como uno solo. Veamos si esto del parent pom me ayuda.
Si a éste le agrego un tag scm >>
<scm> <connection>scm:svn:http:/numerica.cl/svn/ruta/a/miApp</connection> <tag>HEAD</tag> </scm>
Intentaremos materializarlo en un workspace limpio de eclipse con la ayuda de m2e
Ésto es en Import > Maven > Materialize Projects from SCM
En Add seleccionamos el grupo e id del artefacto instalado en nuestro repositorio (local)
y listo, tenemos todos nuestros proyectos bajados al workspace.
Ojo que para ésto Maven tiene que tener acceso a un repositorio donde se haya instalado nuestra app.
Por ejemplo, en un repositorio organizacional donde manejemos las librerías que usa nuestra gente…
De lo contrario, si queremos distribuír la app a más desarrolladores, éstos tienen que traerse los fuentes e instalar por consola, y luego materializar.