Objetivo del tema
En este tema aprenderás qué es un proyecto multi-módulo en Apache Maven, cómo configurar el POM padre, definir la relación entre módulos, estructurar soluciones complejas y aplicar buenas prácticas en contextos empresariales.
Un proyecto multi-módulo (tambien llamado aggregator) agrupa varios módulos Maven bajo un POM padre que coordina dependencias, versiones y tareas de construcción. Cada módulo puede ser un microservicio, una librería compartida o un cliente, pero todos se construyen de forma uniforme.
El POM padre tiene tipo pom
y actúa como agregador. Allí se declaran los módulos y se centralizan dependencias o plugins compartidos.
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ejemplo</groupId>
<artifactId>plataforma</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>api</module>
<module>servicio</module>
<module>cliente</module>
</modules>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>3.2.5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
pom
indica que este artefacto no genera un JAR propio.<modules>
se rellena con rutas relativas a cada módulo.<dependencyManagement>
permite unificar versiones para todos los proyectos hijos.Cada módulo tiene su propio POM, donde declara al POM padre como dependencia de herencia mediante la sección <parent>
. Así hereda configuraciones y puede definir dependencias internas.
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.ejemplo</groupId>
<artifactId>plataforma</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<artifactId>api</artifactId>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>com.ejemplo</groupId>
<artifactId>servicio</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</project>
${project.version}
para mantener sincronía.Una plataforma empresarial puede separarse en módulos para API, lógica de negocio y cliente.
plataforma/
|-- pom.xml
|-- api/
| |-- pom.xml
| `-- src/
|-- servicio/
| |-- pom.xml
| `-- src/
`-- cliente/
|-- pom.xml
`-- src/
api
expone contratos REST o definiciones de interfaces compartidas.servicio
implementa la lógica de negocio y depende del módulo api
.cliente
consume la API y empaqueta la aplicación para usuarios finales.Construir desde la carpeta padre con mvn clean install
garantiza que los artefactos se generen en el orden correcto.
Para mantener proyectos grandes, aplica recomendaciones que faciliten la colaboración y la escalabilidad.
Estas prácticas aseguran que el ecosistema multi-módulo siga siendo mantenible a medida que crece el equipo y la base de código.
Los proyectos multi-módulo permiten dividir soluciones complejas en componentes especializados coordinados por un POM padre. Con una buena configuración de herencia, gestión de dependencias y disciplina en las relaciones entre módulos, es posible escalar plataformas empresariales sin perder consistencia.