Compilar un grupo de proyectos
Maven permite trabajar con lo que llama multimódulos o una estructura multiproyecto. Esto nos permite lanzar una orden de maven sobre un grupo o jerarquía de proyectos, desde una única llamada a éste. Para ello tenemos un *pom.xml* que hace referencia a un conjunto de proyectos de maven.
La estructura habitual consiste en tener una organización en árbol de proyectos, pero también podemos tener una estructura plana, en el que el proyecto que contiene el *pom.xml* en el que se hace referencia al resto de proyectos se encuentra a la misma altura que estos.
En gvSIG la estructura de proyectos que hay en el repositorio de fuentes no está pensada para ser descargada tal cuál, sino que se debe descargar proyecto a proyecto, con lo que tenemos una lista de proyectos todos dentro del mismo directorio.
Aunque en un futuro se podría migrar a una estructura multimódulo de proyectos, por ahora la vamos a simular mediante grupos de proyectos dentro del directorio *build* de gvSIG. Dentro de este, en el subdirectorio *projects* se han creado una serie de directorios, cada uno de los cuáles hace referencia a un grupo de proyectos::
build
`-projects
|-gvsig-base
|-gvsig-cdc-compat
|-gvsig-coverage
|-gvsig-coverage-base
...
Si accedemos a uno de estos directorios, vemos que contienen un archivo *pom.xml*, el cuál hace referencia a un conjunto concreto de proyectos. Así, si desde aquí usamos maven, la orden se lanzará automáticamente para cada uno de los proyectos referenciados.
Este mecanismo nos permite, de forma cómoda, realizar operaciones de compilación e instalación sobre un conjunto de proyectos, o incluso generar un build de gvSIG completo.
El criterio para definir los grupos ha sido el de unir proyectos sobre una misma funcionalidad o cuyo desarrollo se realice de forma conjunta. Además, aprovechando que un *pom.xml* puede hacer referencia, tanto a proyectos sueltos, como a otros conjuntos de proyectos, se ha definido un grupo para la generación de un build completo con la unión de otros grupos.
Por ejemplo, si estamos desarrollando sobre GPE, actualmente está dividido en los siguientes proyectos:
- libGPE
- libGPE-XML
- libGPE-GML
- libGPE-KML
- extGPE-gvSIG
Si queremos compilarlos todos a la vez, bastará con ir al directorio *gvsig-gpe* y realizar la orden::
mvn compile
Esto realizará la compilación de los distintos proyectos de GPE, uno tras otro. Si, en alguno de ellos, se produce un error de compilación, el proceso se detendrá y no seguirá en los siguientes.
Dentro de cada uno de estos directorios de grupos de proyectos, tenemos también un script de utilidad que nos permite hacer un checkout de forma rápida de los proyectos del grupo. Por ejemplo, si queremos desarrollar sobre GPE, bastará con hacer un checkout inicial del directorio *build* y, a continuación, desde el subdirectorio *projects/gvsig-gpe* llamar al script *svnco.sh*, que se encargará de hacer un checkout de los proyectos de GPE.