Herencia y composición de proyectos

De ChuWiki

En maven, jugando con los pom.xml de los proyectos, podemos hacer herencia y composición de proyectos.

La composición no es más que una dependencia normal de las de Maven, de un proyecto con otro.

En el siguiente pom.xml, hacemos que nuestro proyecto dependa del log4j. Esto Maven lo considera como que nuestro proyecto tiene lo que tiene más el log4j, es decir, una composición

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <groupId>prueba</groupId>
 <artifactId>prueba</artifactId>
 <packaging>jar</packaging>
 <version>1.0-SNAPSHOT</version>
 <name>Proyecto compuesto</name>
 <url>http://www.chuidiang.com</url>
 <dependencies>
   <dependency>
     <groupId>log4j</groupId>
     <artifactId>log4j</artifactId>
     <version>1.2.13</version>
     <scope>compile</scope>
   </dependency>
 </dependencies>
</project>


La herencia es un proyecto que tiene subproyectos debajo. Los supproyectos heredan las "cosas" del padre, como plugins para informes, etc.

Para crearlo basta con crear el proyecto padre y luego, dentro de él, el o los hijos

mvn archetype:create -DgroupId=paquete_inicial -DartifactId=proyecto_padre
cd proyecto_padre
mvn archetype:create -DgroupId=paquete_inicial -DartifactId=proyecto_hijo

En el pom.xml del padre, en algún sitio aparecerá

...
<packaging>pom</packaging>
...
<modules>
  <module>proyecto_hijo</module>
</modules>

mientras que en el pom.xml del hijo aparecerá

...
<packaging>jar</packaging>
...
<parent>
   <groupId>paquete_inicial</groupId>
   <artifactId>proyecto_padre</groupId>
   <version>1.0-SNAPSHOT</version>
</parent>

Esto es útil porque nos basta configurar el pom.xml del proyecto padre con los plugins que queramos, y los pom.xml de los proyectos hijos no es necesario tocarlos.

También, cualquier comando maven que ejecutemos en el directorio del proyecto padre, se ejecutará en todos los hijos, teniendo en cuenta dependencias entre ellos para ejecutarlos en orden. Por ejemplo, si hacemos mvn install en el proyecto padre, se irá haicendo automáticamente mvn install en los proyectos hijos y en el orden adecuado para que los más independientes se hagan primero.


Enlaces externos[editar]