Maven中BOM

一、BOM简介

BOM(Bill of Materials)是由Maven提供的功能,它通过定义一整套相互兼容的jar包版本集合,使用时只需要依赖该BOM文件,即可放心的使用需要的依赖jar包,且无需再指定版本号。BOM的维护方负责版本升级,并保证BOM中定义的jar包版本之间的兼容性。

  • 1.1、为什么需要BOM

使用BOM除了可以方便使用者在声明依赖的客户端时不需要指定版本号外,最主要的原因是可以解决依赖冲突,如考虑以下的依赖场景:

项目A依赖项目B 2.1和项目C 1.2版本: 
项目B 2.1依赖项目D 1.1版本; 
项目C 1.2依赖项目D 1.3版本;

在该例中,项目A对于项目D的依赖就会出现冲突,按照maven dependency mediation的规则,最后生效的可能是:项目A中会依赖到项目D1.1版本(就近原则,取决于路径和依赖的先后,和Maven版本有关系)。
在这种情况下,由于项目C依赖1.3版本的项目D,但是在运行时生效的确是1.1版本,所以在运行时很容易产生问题,如 NoSuchMethodError, ClassNotFoundException等。

  • 1.2、如何定义BOM

BOM本质上是一个普通的POM文件,区别是对于使用方而言,生效的只有这一个部分。只需要在定义对外发布的客户端版本即可:



    4.0.0

    com.ydj.qd
    inf-bom
    1.0
    pom

    inf-bom
    第三方jar包统一管理

    
        UTF-8
        UTF-8
        1.8
        4.3.15.RELEASE
    

    
        

            
            
            
                com.alibaba
                druid
                1.1.12
            
            
            
                com.aliyun.mns
                aliyun-sdk-mns
                1.1.8
                jar-with-dependencies
            
            
                com.alibaba
                fastjson
                1.2.29
            

            
            
                org.apache.commons
                commons-lang3
                3.3.2
            
            
                commons-collections
                commons-collections
                3.2.2
            
            
                org.apache.commons
                commons-collections4
                4.1
            
            
                commons-beanutils
                commons-beanutils
                1.9.1
            


            
            
            
                com.google.guava
                guava
                27.0.1-jre
            
            
                com.google.code.gson
                gson
                2.8.5
            


            
            
                joda-time
                joda-time
                2.7
            
            
                org.projectlombok
                lombok
                1.14.4
            

        
    

    
    

    
        
            maven-releases
            maven-releases
            http://mvn.ydj.com/repository/maven-releases/
        
        
            maven-snapshots
            maven-snapshots
            http://mvn.ydj.com/repository/maven-snapshots/
        
    


二、项目使用方法

  • 2.1、在你的项目主pom.xml文件中节点下首位处加入如下:

    
         
            com.jlcx.qd
            inf-bom
            ${version}
            pom
            import
          
          
          
            ...
          
    

  • 2.2、在需要使用相关JAR包的pom.xml文件中节点下引入如下:
    
        ...
        
            com.google.guava
            guava
        

        
            commons-collections
            commons-collections
        
        ....
    

如果需要使用不同于当前bom中所维护的jar包版本,则加上覆盖即可,如:

    
        ...
        
            com.google.guava
            guava
        

        
            commons-collections
            commons-collections
            3.2.1
        
        ....
    

三、参考资料

  • https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html
  • http://ifeve.com/maven-dependency-mechanism/
  • https://blog.csdn.net/blueheart20/article/details/81011805

你可能感兴趣的:(Java,Linux)