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 文件,如下:


    org.springframework.boot
    spring-boot-dependencies
    2.6.8
    pom
    import

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

我们也可以定义自己的 BOM,比如定义一个 pom 文件,其中 packaging 指定为 pom,在 dependencyManagement 中定义所需的依赖包版本集合,如下:




    4.0.0

    com.phoenix
    phoenix-framework
    1.0-SNAPSHOT
    phoenix-framework
    pom

    
        1.8
        UTF-8
        2.2.2
        1.2.83
        30.0-jre
        3.5.10
    

    
        
            
                com.alibaba
                fastjson
                ${fastjson.version}
            
            
                com.google.guava
                guava
                ${guava.version}
            
            
                org.mybatis
                mybatis
                ${mybatis.version}
            
            
                org.mybatis.spring.boot
                mybatis-spring-boot-starter
                ${spring-boot.mybatis}
            
        
    

BOM 使用

BOM 在实际应用中的主要作用就是将 jar 包的版本集中管理,在需要用到依赖 jar 包的应用中导入 BOM,然后配置所需的依赖 dependency 即可,无需指定 jar 包的版本号。如下:



    
        phoenix-framework
        com.phoenix
        1.0-SNAPSHOT
    
    4.0.0

    phoenix-auth
    jar

    
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            com.alibaba
            fastjson
        
    

    
        ${project.artifactId}
        
            
                org.springframework.boot
                spring-boot-maven-plugin
                ${spring-boot.version}
                
                    
                        
                            repackage
                        
                    
                
            
        
    

其中 spring-boot-starter-web 和 fastjson 这两个依赖,我们没有指定版本号,版本号自动从 parent 的 pom 定义中获得,如果在多个项目中都需要依赖这两个依赖包,以同样的方式配置 depencency 即可,这样就做到了不同的项目中,相同的依赖包版本的统一管理。

参考

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

你可能感兴趣的:(maven)