Maven — Комплексный анализ спецификации Maven (спецификация материалов): создание эффективного управления зависимостями и модульной разработки.
Maven — Комплексный анализ спецификации Maven (спецификация материалов): создание эффективного управления зависимостями и модульной разработки.

What’s BOM

Спецификация (спецификация) — это функция, предоставляемая Maven. Она определяет набор взаимно совместимых версий пакетов jar. При ее использовании вам нужно полагаться только на файл спецификации, и вы можете безопасно использовать необходимые зависимые пакеты jar без указания. им. Номер версии.

Bom обычно представляет собой отдельный модуль в проекте, то есть модуль только с одним файлом pom.xml, и используется с такими метками, как dependencyManagement, для достижения унифицированного управления глобальными зависимостями проекта.

Сопровождающий спецификации отвечает за обновление версий и обеспечение совместимости между версиями пакетов jar, определенными в спецификации.

Why Bom

  1. Пользователям удобно отсутствие необходимости указывать номер версии при объявлении зависимых клиентов.
  2. 最主要из原因是可以Разрешение конфликтов зависимостей

Приведите пример

  • Проект A зависит от версий проекта B 2.1 и проекта C 1.2:
  • Проект B 2.1 зависит от проекта D версии 1.1;
  • Проект C 1.2 зависит от проекта D версии 1.3;

В этом случае,Возникнет конфликт между проектом А и проектом D.,в соответствии сmaven dependency mediationправила,Последним, вступившим в силу, может быть:проектAсередина会依赖到проектD1.1Версия(Принцип близости зависит от порядка путей и зависимостей.,Это как-то связано с версией Maven).

В этом случае, поскольку проект C зависит от версии 1.3 проекта D, но на самом деле именно версия 1.1 вступает в силу во время выполнения, поэтому во время выполнения легко вызвать проблемы, такие как NoSuchMethodError, ClassNotFoundExceptionждать,В некоторых jar-пакетах по-прежнему сложно обнаружить конфликты.,Этот метод может сэкономить много времени при обнаружении таких проблем.

Общая официальная спецификация

Each project has it’s own maven bom file

Обратите внимание, что универсального или универсального файла спецификации не существует. Каждый проект (если он поддерживает эту функцию) предоставляет свой собственный файл спецификации и управляет версиями связанных с ним зависимостей.

Spring, SpringBoot и SpringCloud сами используют этот механизм для разрешения конфликтов сторонних пакетов.

Также рекомендуется использовать эту прекрасную традицию в проектах, особенно на ранних стадиях разработки проекта. Изменение спецификации на более позднем этапе может потребовать множества изменений, что более сложно.

Spring Maven BOM dependency

Язык кода:javascript
копировать
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-framework-bom</artifactId>
            <version>4.0.1.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

SpringBoot SpringCloud Maven BOM dependency

Язык кода:javascript
копировать
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.4.4</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>2020.0.2</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

JBOSS Maven BOM dependency

Язык кода:javascript
копировать
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.jboss.bom</groupId>
            <artifactId>jboss-javaee-6.0-with-tools</artifactId>
            <version>${some.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement> 

RESTEasy Maven BOM dependency

Язык кода:javascript
копировать
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-bom</artifactId>
            <version>3.0.6.Final</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

Jersey Maven BOM dependency

Язык кода:javascript
копировать
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.glassfish.jersey</groupId>
            <artifactId>jersey-bom</artifactId>
            <version>${jersey.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

How Bom

Определить спецификацию

BOM — это, по сути, обычный POM-файл. Разница в том, что он предназначен только для пользователя. <dependencyManagement>эта часть。

Просто нужно быть внутри<dependencyManagement>定义对外发布из客户端Версия即可,например Необходимо унифицировать все версии SpringBoot и SpringCloud в проекте

Давайте возьмем ЮДао в качестве примера.

общая структура

Язык кода:javascript
копировать
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>cn.iocoder.boot</groupId>
    <artifactId>yudao-dependencies</artifactId>
    <version>${revision}</version>
    <packaging>pom</packaging>

    <name>${project.artifactId}</name>
    <description>База bom документ,управлять整个проектиз依赖Версия</description>
    <url>https://github.com/YunaiV/ruoyi-vue-pro</url>

    <properties>
        <revision>1.8.0-snapshot</revision>
        <!-- Единство зависит от управления -->
        <spring.boot.version>2.7.13</spring.boot.version>
        <!-- Web Связанный -->
        <springdoc.version>1.6.15</springdoc.version>
        ......
    </properties>

    <dependencyManagement>
        <dependencies>
          ....
        </dependencies>
    </dependencyManagement>

</project>

Здесь наступает момент ,следующее dependencyManagement

Язык кода:javascript
копировать
 <dependencyManagement>
        <dependencies>
            <!-- Единство зависит от управления -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring.boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!-- бизнес-компоненты -->
           .....
           
		</dependencies>
 </dependencyManagement>

Методы, используемые в других проектах

在проект主pom.xmlдокументсередина<dependencyManagement></dependencyManagement>Присоединяйтесь под узломBOMизGAVТакая информация, как

Давайте возьмем ЮДао в качестве примера.

Язык кода:javascript
копировать
   <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>cn.iocoder.boot</groupId>
                <artifactId>yudao-dependencies</artifactId>
                <version>${revision}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

Используйте при необходимости СвязанныйJAR包изpom.xmlдокументсередина<dependencies></dependencies>Следующее вводится под узлом:

В качестве примера возьмем еще один подмодуль YuDao.

После этой настройки,Если проект требует обновления версии Spring, вам нужно только обновить и проверить совместимость на стороне поставщика, а затем изменить зависимости спецификации.

Если вам нужно использовать версию пакета jar, отличную от той, которая поддерживается в текущей спецификации,затем добавь<version>Просто прикрой, например

Язык кода:javascript
копировать
<dependencies>
    <!--Используется в это времяSpringиGson都不需要加Версия号,будет автоматически цитироватьсяBOMсередина提供из Версия-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <!--перезапишетBOMсередина声明из Версия2.8.6,使用自定义Версия2.8.2-->
        <version>2.8.2</version>
    </dependency>
</dependencies>

BOM VS POM

Во-первых, спецификации — это обычные файлы pom.xml — они не содержат исходного кода, и их единственная цель — объявить содержащиеся в них модули. Он определяет версии всех артефактов, которые будут созданы в библиотеке. Другие проекты, желающие использовать эту библиотеку, должны импортировать этот pom в раздел управления зависимостями своего pom.

POM-файлы — это больше, чем просто зависимости. Например, организация и лицензия, URL-адрес проекта, зависимости проекта, плагины, файлы конфигурации и много другой информации. Он также контролирует весь процесс сборки проекта.

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода