Рубрики
Без рубрики

Весна с Maven BOM

Узнайте, как использовать BOM, Билль материалов, в вашем проекте Весна Maven.

Автор оригинала: baeldung.

Весна с 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. Перезапись зависимости ОТ БОМ

Порядок приоритета версии артефакта:

  1. Версия прямого декларирования артефакта в нашем проекте pom
  2. Версия артефакта в родительском проекте
  3. Версия в импортном поме, с учетом порядка импорта файлов
  4. посредничество зависимости
  • Мы можем переписать версию артефакта, явно определив артефакт в поме нашего проекта с желаемой версией
  • Если один и тот же артефакт определяется с различными версиями в 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 .