Весна с Maven BOM
1. Обзор
В этом быстром учебнике мы посмотрим, как Maven, инструмент, основанный на концепции модели объектов проекта (POM), может использовать BOM или “Билль материалов”.
Для получения более подробной информации о Maven, вы можете проверить нашу статью Apache Maven Tutorial .
2. Концепции управления зависимостью
Чтобы понять, что такое BOM и для чего мы можем его использовать, сначала нам нужно изучить основные понятия.
2.1. Что такое Maven POM?
Maven POM — это файл XML, содержащий информацию и конфигурации (о проекте), которые используются Maven для импорта зависимостей и построения проекта.
2.2. Что такое Maven BOM?
BOM означает Билл Материалов. BOM – это особый вид POM, который используется для управления версиями зависимостей проекта и обеспечения центрального места для определения и обновления этих версий.
BOM обеспечивает гибкость, чтобы добавить зависимость к нашему модулю, не беспокоясь о версии, от которой мы должны зависеть.
2.3. Транзитные зависимости
Maven может обнаружить библиотеки, которые необходимы нашим собственным зависимостям в нашем пом.xml и включает их автоматически. Количество уровней зависимости, из которого собираются библиотеки, не ограничивается.
Конфликт возникает, когда 2 зависимости относятся к различным версиям конкретного артефакта. Какой из них будет включен Maven?
Ответ здесь “ближайшее определение”. Это означает, что используемая версия будет ближе всего к нашему проекту в дереве зависимостей. Это называется посредничеством зависимости.
Рассмотрим следующий пример для уточнения посредничества зависимости:
A -> B -> C -> D 1.4 and A -> E -> D 1.0
Этот пример показывает, что проект зависит от B и Э. B и E имеют свои собственные зависимости, которые сталкиваются с различными версиями D артефакт. Артефакт D 1.0 будет использоваться при сборке проект, потому что путь через E короче.
Существуют различные методы определения того, какая версия артефактов должна быть включена:
- Мы всегда можем гарантировать версию, объявив ее прямо в POM нашего проекта. Например, чтобы гарантировать, что D 1.4 используется, мы должны добавить его явно как зависимость в пом.xml файл.
- Мы можем использовать Управление зависимостью раздел для управления версиями артефактов, как мы объясним позже в этой статье.
2.4. Управление зависимостью
Проще говоря, управление зависимостью является механизмом централизации информации о зависимости.
Когда у нас есть набор проектов, которые наследуют общего родителя, мы можем поместить всю информацию о зависимости в общий файл POM под названием BOM.
Ниже приводится пример того, как написать файл 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
Как мы видим, BOM является нормальным файлом POM с зависимостьУкоминие раздел, где мы можем включить всю информацию артефакта и версии.
2.5. Использование файла BOM
Есть 2 способа использовать предыдущий файл BOM в нашем проекте, и тогда мы будем готовы объявить наши зависимости, не беспокоясь о номерах версий.
Мы можем унаследовать от родителя:
4.0.0 baeldung Test 0.0.1-SNAPSHOT pom Test baeldung Baeldung-BOM 0.0.1-SNAPSHOT
Как мы видим, наш проект Test наследует Baeldung-BOM.
Мы также можем импортировать БОМ.
В более крупных проектах подход к наследованию не эффективен, поскольку проект может наследовать только одного родителя. Импорт является альтернативой, как мы можем импортировать столько БОМ, сколько нам нужно.
Давайте посмотрим, как мы можем импортировать файл BOM в наш проект POM:
4.0.0 baeldung Test 0.0.1-SNAPSHOT pom Test baeldung Baeldung-BOM 0.0.1-SNAPSHOT pom import
2.6. Перезапись зависимости ОТ БОМ
Порядок приоритета версии артефакта:
- Версия прямого декларирования артефакта в нашем проекте pom
- Версия артефакта в родительском проекте
- Версия в импортном поме, с учетом порядка импорта файлов
- посредничество зависимости
- Мы можем переписать версию артефакта, явно определив артефакт в поме нашего проекта с желаемой версией
- Если один и тот же артефакт определяется с различными версиями в 2 импортированных БОМ, то версия в файле BOM, которая была объявлена первой, победит
3. Весенний БОМ
Мы можем обнаружить, что сторонняя библиотека, или другой проект Spring, притягивает транзитную зависимость к более старшему выпуску. Если мы забудем открыто объявить о прямой зависимости, могут возникнуть неожиданные проблемы.
Чтобы преодолеть такие проблемы, Maven поддерживает концепцию зависимости от БОМ.
Мы можем импортировать весна-рамки-бом в нашем зависимостьУкоминие раздел для обеспечения того, чтобы все зависимости Spring находятся в одной версии:
org.springframework spring-framework-bom 4.3.8.RELEASE pom import
Нам не нужно указывать версия атрибут, когда мы используем артефакты весны, как в следующем примере:
org.springframework spring-context org.springframework spring-web
4. Заключение
В этой быстрой статье мы показали Maven Bill-Of-Material Concept и как централизовать информацию и версии артефакта в общем POM.
Проще говоря, мы можем либо наследовать или импортировать его, чтобы использовать преимущества BOM.
Примеры кода в статье можно найти более на GitHub .