关于maven:Maven的BOM应用

BOM 概念

BOM(Bill of Materials)是由 Maven 提供的性能,它用来定义一套互相兼容的 jar 包版本汇合,应用时只须要依赖该 BOM 文件,即可应用须要的依赖 jar 包,且无需再指定版本号。BOM 的保护方负责版本升级,并保障 BOM 中定义的 jar 包版本之间的兼容性。

BOM 创立

BOM (Bill of Materials Dependency)实质上是一个 pom 文件,当咱们在构建 Springboot 我的项目的时候引入的 spring-boot-dependencies 依赖,其本质就是一个 pom 文件,如下:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>2.6.8</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

spring-boot-dependencies 的 pom 文件外面定义了一套互相兼容的可能满足 Springboot 利用所需的依赖包版本汇合,这些依赖包定义在 dependencyManagement 中。另外,还定义了一些构建利用可能用到的插件,这些插件定义在 pluginManagement 中。

咱们也能够定义本人的 BOM,比方定义一个 pom 文件,其中 packaging 指定为 pom,在 dependencyManagement 中定义所需的依赖包版本汇合,如下:

<?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>com.phoenix</groupId>
    <artifactId>phoenix-framework</artifactId>
    <version>1.0-SNAPSHOT</version>
    <name>phoenix-framework</name>
    <packaging>pom</packaging>

    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <spring-boot.mybatis>2.2.2</spring-boot.mybatis>
        <fastjson.version>1.2.83</fastjson.version>
        <guava.version>30.0-jre</guava.version>
        <mybatis.version>3.5.10</mybatis.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>${fastjson.version}</version>
            </dependency>
            <dependency>
                <groupId>com.google.guava</groupId>
                <artifactId>guava</artifactId>
                <version>${guava.version}</version>
            </dependency>
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>${mybatis.version}</version>
            </dependency>
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>${spring-boot.mybatis}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

BOM 应用

BOM 在理论利用中的次要作用就是将 jar 包的版本集中管理,在须要用到依赖 jar 包的利用中导入 BOM,而后配置所需的依赖 dependency 即可,无需指定 jar 包的版本号。如下:

<?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">
    <parent>
        <artifactId>phoenix-framework</artifactId>
        <groupId>com.phoenix</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>phoenix-auth</artifactId>
    <packaging>jar</packaging>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
        </dependency>
    </dependencies>

    <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

其中 spring-boot-starter-web 和 fastjson 这两个依赖,咱们没有指定版本号,版本号主动从 parent 的 pom 定义中取得,如果在多个我的项目中都须要依赖这两个依赖包,以同样的形式配置 depencency 即可,这样就做到了不同的我的项目中,雷同的依赖包版本的对立治理。

参考

https://maven.apache.org/guid…

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理