Proyecto multimódulo

Normalmente, cuando diseñamos una aplicación web de un cierto tamaño, no implementamos todas nuestras clases Java y ficheros de configuración directamente en el proyecto web, sino que creamos varios proyectos jar, que luego se incluyen en el war. Para hacer esto en Maven se utilizan los proyecto multimódulo, esto es, un proyecto “padre” de tipo “pom”, que contiene todos proyectos “hijo”. En este caso los “hijos” serían, el proyecto web y los proyectos de tipo jar.

Trabajar con varios proyectos

El objetivo que perseguimos es crear un proyecto Web que genere un War, que tenga en su carpeta lib el proyecto jar. Empezamos por crear un pom.xml, por encima de los dos proyectos:

Sobre estas líneas se ve la estructura. Tenemos en primer nivel, el pom.xml “padre” y los dos proyectos “hijo”, el proyecto web y el jar, cada uno de ellos con su pom.xml. Veamos el pom.xml “padre”:

Como podemos ver, es un proyecto de tipo “pom” y contiene los dos módulos que hemos comentado. A continuación lo que tenemos que hacer es poner la dependencia en el proyecto web hacia el otro proyecto:

Finalmente, hay que añadir en los dos pom.xml hijos, la referencia al pom.xml padre:

Multimódulo y m2eclipse

Vamos a hacer lo mismo que hemos explicado en el apartado anterior, pero esta vez utilizando Eclipse. Lo primero que hay que hacer es crear un proyecto padre, de tipo pom. Seleccionamos en Eclipse el menú “File>>New>>Other>>Maven proyect”.

Nuevo proyecto Maven

Nuevo proyecto Maven

Filtramos el arquetipo por “pom”, y seleccionamos el arquetipo “pom-root”, para que nos genere el “padre”:

Nuevo proyecto pom-root

Nuevo proyecto pom-root

Le damos un nombre “ProyectoPadre” y terminamos. Ahora vamos a crear un proyecto web y un proyecto normal. Creamos un nuevo módulo:

Nuevo módulo

Nuevo módulo

Indicamos el proyecto padre y le damos un nombre:

Proyecto web

Proyecto web

Seleccionamos el arquetipo “maven-archetype-webapp” y lo generamos. Repetimos el proceso para crear un proyecto java normal, que llamaremos “Librería”. Finalmente, seleccionaremos el proyecto web, “click derecho>>Maven>>Add Dependency”, buscamos la librería escribiendo en el campo de texto “Libre” para que filtre y nos muestre el proyecto:

Dependencia al módulo Librería

Dependencia al módulo Librería

Bien, con eso ya habríamos creado el proyecto multimódulo. Vamos a pararnos un poco, para analizar como se muestran los proyectos en el administrador de paquetes de Eclipse, ya que es un poco particular:

Proyecto multimódulo en eclipse

Proyecto multimódulo en eclipse

Bien, en la imagen que se muestra sobre estas líneas, se ha marcado con un rectángulo rojo, los tres proyectos, aparecen en Eclipse como proyectos normales y podemos trabajar con ellos como siempre. Si nos fijamos en “ProyectoPadre”, vemos que contiene dos carpetas que hemos rodeado con un rectángulo verde y que se corresponde con los archivos de los dos proyectos hijos. De modo, que es como si los proyectos estuvieran duplicados. De hecho, el archivo App.java que se muestra en la imagen con una flecha es el mismo, da igual abrirlo haciendo doble click en un sitio y en otro.

Bien, esto es así, porque Maven necesita que los proyectos esten dispuestos físicamente de manera jerárquica en el directorio y Eclipse, trabaja con todos los proyectos en el mismo nivel.

Heredando la configuración

La configuración se hereda del pom padre. Por ejemplo, para compilar todos los proyectos con java 6, basta con añadir esto en el pom padre:

Empaquetar el proyecto multimódulo

Le damos a “Run As…>>Run Configuration y creamos una configuración “Maven Build”, nos aseguramos de poner bien el “Base directory” y lanzamos la siguiente ejecución

Empaquetar y crear el site

Empaquetar y crear el site

Esto nos creará el Site del proyecto padre y de los dos hijos. Y nos creará un fichero “ProyectoWeb.war”. Si abrimos dicho war para ver su contenido, comprobamos que contiene el proyecto “Libreria” en su carpeta “lib”.

Detalle del War

Detalle del War

Hasta aquí este post. En el siguiente artículo veremos : Perfiles

3 comentarios:

  1. Gracias por la información, te agradecería si hicieras el mismo tutorial pero con el neetbeans. Éxitos y ojala me leas.

    • Hola Daniel,

      Lamentablemente no dispongo de todo el tiempo que me gustaría para añadir contenido a la página. Te animo a que sigas el tutorial y lo intentes realizar con NetBeans, ya que la mecánica es muy similar. Seguro que no tendrás problemas.

      Un saludo

  2. Hola, al filtrar el arquetipo por “pom” no me aparece nada. ¿A qué se puede deber?
    ¿Como puedo encontrar un arquetipo para generar el proyecto padre?

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *