Primavera con Maven BOM

1. Información general

En este tutorial rápido, veremos cómo Maven, una herramienta basada en el concepto de Project Object Model (POM), puede hacer uso de una lista de materiales o una "lista de materiales".

Para obtener más detalles sobre Maven, puede consultar nuestro artículo Tutorial de Apache Maven.

2. Conceptos de gestión de dependencias

Para comprender qué es una lista de materiales y para qué podemos usarla, primero debemos aprender los conceptos básicos.

2.1. ¿Qué es Maven POM?

Maven POM es un archivo XML que contiene información y configuraciones (sobre el proyecto) que Maven usa para importar dependencias y construir el proyecto.

2.2. ¿Qué es Maven BOM?

BOM significa lista de materiales. Una BOM es un tipo especial de POM que se utiliza para controlar las versiones de las dependencias de un proyecto y proporcionar un lugar central para definir y actualizar esas versiones.

BOM proporciona la flexibilidad de agregar una dependencia a nuestro módulo sin preocuparnos por la versión de la que debemos depender.

2.3. Dependencias transitivas

Maven puede descubrir las bibliotecas que necesitan nuestras propias dependencias en nuestro pom.xml y las incluye automáticamente. No hay límite para el número de niveles de dependencia de los que se recopilan las bibliotecas.

El conflicto aquí surge cuando 2 dependencias se refieren a diferentes versiones de un artefacto específico. ¿Cuál será incluido por Maven?

La respuesta aquí es la "definición más cercana". Esto significa que la versión utilizada será la más cercana a nuestro proyecto en el árbol de dependencias. Esto se llama mediación de dependencia.

Veamos el siguiente ejemplo para aclarar la mediación de dependencia:

A -> B -> C -> D 1.4 and A -> E -> D 1.0

Este ejemplo muestra que el proyecto A depende de B y E. B y E tienen sus propias dependencias que encuentran diferentes versiones del artefacto D. El artefacto D 1.0 se utilizará en la construcción de un proyecto porque la ruta a través de E es más corta.

Existen diferentes técnicas para determinar qué versión de los artefactos se debe incluir:

  • Siempre podemos garantizar una versión declarándola explícitamente en el POM de nuestro proyecto. Por ejemplo, para garantizar que se use D 1.4, debemos agregarlo explícitamente como una dependencia en el archivo pom.xml .
  • Podemos utilizar la sección Gestión de dependencias para controlar las versiones de artefactos, como explicaremos más adelante en este artículo.

2.4. Gestión de dependencias

En pocas palabras, la gestión de dependencias es un mecanismo para centralizar la información de las dependencias.

Cuando tenemos un conjunto de proyectos que heredan un padre común, podemos poner toda la información de dependencia en un archivo POM compartido llamado BOM.

A continuación se muestra un ejemplo de cómo escribir un archivo BOM:

 4.0.0 baeldung Baeldung-BOM 0.0.1-SNAPSHOT pom BaelDung-BOM parent pom    test a 1.2   test b 1.0 compile   test c 1.0 compile    

Como podemos ver, la lista de materiales es un archivo POM normal con una sección de gestión de dependencias donde podemos incluir toda la información y versiones de un artefacto.

2.5. Uso del archivo BOM

Hay 2 formas de usar el archivo BOM anterior en nuestro proyecto y luego estaremos listos para declarar nuestras dependencias sin tener que preocuparnos por los números de versión.

Podemos heredar del padre:

 4.0.0 baeldung Test 0.0.1-SNAPSHOT pom Test  baeldung Baeldung-BOM 0.0.1-SNAPSHOT  

Como podemos ver, nuestro proyecto Test hereda el Baeldung-BOM.

También podemos importar la lista de materiales.

En proyectos más grandes, el enfoque de la herencia no es eficiente porque el proyecto puede heredar solo un padre. La importación es la alternativa, ya que podemos importar tantas listas de materiales como necesitemos.

Veamos cómo podemos importar un archivo BOM en nuestro proyecto POM:

 4.0.0 baeldung Test 0.0.1-SNAPSHOT pom Test    baeldung Baeldung-BOM 0.0.1-SNAPSHOT pom import    

2.6. Sobrescritura de la dependencia de la lista de materiales

El orden de precedencia de la versión del artefacto es:

  1. La versión de la declaración directa del artefacto en nuestro proyecto pom
  2. La versión del artefacto en el proyecto principal
  3. La versión en el pom importado, teniendo en cuenta el orden de importación de los archivos.
  4. mediación de dependencia
  • Podemos sobrescribir la versión del artefacto definiendo explícitamente el artefacto en el pom de nuestro proyecto con la versión deseada.
  • Si el mismo artefacto se define con diferentes versiones en 2 listas de materiales importadas, la versión del archivo de lista de materiales que se declaró primero ganará

3. Lista de materiales de primavera

Podemos encontrar que una biblioteca de terceros, u otro proyecto de Spring, genera una dependencia transitiva a una versión anterior. Si olvidamos declarar explícitamente una dependencia directa, pueden surgir problemas inesperados.

Para superar estos problemas, Maven apoya el concepto de dependencia de BOM.

Podemos importar el spring-framework-bom en nuestra sección de dependencyManagement para asegurarnos de que todas las dependencias de Spring estén en la misma versión:

   org.springframework spring-framework-bom 4.3.8.RELEASE pom import   

No necesitamos especificar el atributo de versión cuando usamos los artefactos Spring como en el siguiente ejemplo:

  org.springframework spring-context   org.springframework spring-web  

4. Conclusión

En este artículo rápido, mostramos el concepto de lista de materiales de Maven y cómo centralizar la información y las versiones del artefacto en un POM común.

En pocas palabras, podemos heredarlo o importarlo para aprovechar los beneficios de la lista de materiales.

Los ejemplos de código del artículo se pueden encontrar en GitHub.