Спецификация (спецификация) — это функция, предоставляемая Maven. Она определяет набор взаимно совместимых версий пакетов jar. При ее использовании вам нужно полагаться только на файл спецификации, и вы можете безопасно использовать необходимые зависимые пакеты jar без указания. им. Номер версии.
Bom обычно представляет собой отдельный модуль в проекте, то есть модуль только с одним файлом pom.xml, и используется с такими метками, как dependencyManagement, для достижения унифицированного управления глобальными зависимостями проекта.
Сопровождающий спецификации отвечает за обновление версий и обеспечение совместимости между версиями пакетов jar, определенными в спецификации.
Приведите пример
В этом случае,Возникнет конфликт между проектом А и проектом 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 сами используют этот механизм для разрешения конфликтов сторонних пакетов.
Также рекомендуется использовать эту прекрасную традицию в проектах, особенно на ранних стадиях разработки проекта. Изменение спецификации на более позднем этапе может потребовать множества изменений, что более сложно.
<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>
<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>
<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>
<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>
<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>
BOM — это, по сути, обычный POM-файл. Разница в том, что он предназначен только для пользователя. <dependencyManagement>
эта часть。
Просто нужно быть внутри<dependencyManagement>
定义对外发布из客户端Версия即可,например Необходимо унифицировать все версии SpringBoot и SpringCloud в проекте
Давайте возьмем ЮДао в качестве примера.
общая структура
<?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
<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Такая информация, как
Давайте возьмем ЮДао в качестве примера.
<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>
Просто прикрой, например
<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>
Во-первых, спецификации — это обычные файлы pom.xml — они не содержат исходного кода, и их единственная цель — объявить содержащиеся в них модули. Он определяет версии всех артефактов, которые будут созданы в библиотеке. Другие проекты, желающие использовать эту библиотеку, должны импортировать этот pom в раздел управления зависимостями своего pom.
POM-файлы — это больше, чем просто зависимости. Например, организация и лицензия, URL-адрес проекта, зависимости проекта, плагины, файлы конфигурации и много другой информации. Он также контролирует весь процесс сборки проекта.