• 微服务中使用Maven BOM来管理你的版本依赖


    摘要: 原创出处 sf.gg/a/1190000021198564 「飘渺Jam」欢迎转载,保留摘要,谢谢!

    1. 为什么要使用BOM?

    2. 如何定义BOM?

    3. 项目使用方法?

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

    为什么要使用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等。

    如何定义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/
        
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    项目使用方法 在你的项目主pom.xml文件中节点下首位处加入如下: com.jlcx.qd inf-bom ${version} pom import
          
            ...
          
    
    
    • 1
    • 2
    • 3
    • 4
    在需要使用相关JAR包的pom.xml文件中节点下引入如下: ... com.google.guava guava
    
        commons-collections
        commons-collections
    
    ....
    
    • 1
    • 2
    • 3
    • 4
    • 5
    如果需要使用不同于当前bom中所维护的jar包版本,则加上覆盖即可,如: ... com.google.guava guava
    
        commons-collections
        commons-collections
        3.2.1
    
    ....
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    WX 搜索《醉鱼Java》,回复面试,获取2024面试资料。

    如果这篇文章对您有所帮助或者启发,帮忙点个关注叭,您的支持是我坚持写作的最大动力。

    求一键三连:点赞、转发、在看。

    谢谢支持哟 !

    在这里插入图片描述

  • 相关阅读:
    LLMs Python解释器程序辅助语言模型(PAL)Program-aided language models (PAL)
    y114.第六章 微服务、服务网格及Envoy实战 -- Envoy网格安全(二五)
    云原生化有什么特点?
    python+django的插画师作品分享投稿网站
    经验分享|如何有效地进行审稿意见回复
    Stable Diffusion 启动时 got an unexpected keyword argument ‘socket_options‘ 错误解决
    数学建模 -- 层次分析法(AHP)
    【STM32-DSP库的使用】基于Keil5 + STM32CubeMX 手动添加、库添加方式
    tcpdump(二)命令行参数讲解(一)
    Android 图片上传
  • 原文地址:https://blog.csdn.net/C1041067258/article/details/139203404