什么BOM?BOM(BillofMaterials)是Maven提供的一个功能。它定义了一组相互兼容的jar包版本。使用时只需要依赖BOM文件,无需指定即可放心使用所需的依赖jar包。版本号。BOM维护者负责版本升级,保证BOM中定义的jar包版本之间的兼容性。为什么是物料清单?使用BOM不仅方便用户在声明依赖客户端时不用指定版本号,更重要的是可以解决依赖冲突。例如,考虑以下依赖场景:项目A依赖项目B2.1和项目C1.2版本:项目B2.1依赖项目D1.1版本;项目C1.2依赖于项目D1.3版本;在这个例子中,项目A对项目D的依赖会发生冲突。根据maven依赖中介的规则,最后生效的版本可能是:项目A将依赖项目D1.1版本(就近原则,取决于路径和依赖的先后顺序,与Maven版本相关)。这种情况下,因为项目C依赖了1.3版本的项目D,但是运行时生效的确实是1.1版本,所以很容易在运行时出现问题,比如NoSuchMethodError、ClassNotFoundException等,还是很难解决定位一些jar包冲突,这种方法在定位此类问题时可以节省很多时间。Spring、SpringBoot、SpringCloud都是利用这种机制来解决与第三方包的冲突。常见的官方BOM有:1)RESTEasyMavenBOMdependencyorg.jboss.resteasyresteasy-bom3.0.6.Finalpomimport2.JBOSSMavenBOM依赖项org.jboss.bomjboss-javaee-6.0-with-tools${some.version}pom导入3)SpringMavenBOM依赖项org.springframeworkspring-framework-bom4.0.1.RELEASEpomimport4)JerseyMavenBOM依赖org.glassfish.jerseyjersey-bom${jersey.version}pomimport5)SpringCloudSpringBootMavenBOM依赖项org.springframework.bootspring-boot-dependencies2.4.4pomimportorg.springframework.cloudspring-cloud-dependencies2020.0.2pomimport看的有点懵没关系,下面就来介绍下的作用这些配置在你开发的项目中有详细说明,也推荐沿用这个优良传统,尤其是在项目开发的前期。后期修改BOM可能比较困难,因为可能涉及到很多revisions。BOM如何?定义BOMBOM本质上是一个普通的POM文件,不同的是对于用户来说,只有部分是有效的。您只需要在中定义对外发布的客户端版本即可。比如你需要统一项目中所有的SpringBoot和SpringCloud版本。第一步在POM文件中添加两个官方BOM,使用最新稳定的SpringBoot版本例如使用官方推荐的版本组合比较稳定,一般不会出现大问题com.niu.notniu-dependency1.1.14.0.0pomorg.springframework.bootspring-boot-dependencies2.4.6pom导入org.springframework.cloudspring-cloud-dependencies<版本>2020.0.3pomimportcom.google.code.gsongson2.8.6下面的Gson是一个jar,需要除SpringBoot和SpingCloud之外版本统一。其他项目使用方法在项目主pom.xml文件中节点下的BOM添加的GAV信息如下:com.niu.notniu-dependency<版本>1.1.1pomimport是必需的要使用相关JAR包的pom.xml文件,在节点下引入:com.google.code。gsongson这样设置后,如果项目需要升级Spring版本,只需要在provider端升级验证兼容性即可,然后修改BOM依赖。如果需要使用与当前bom中维护的版本不同的jar包,可以添加覆盖,如:org.springframework.cloudspring-cloud-starter-openfeigncom.google.code.gsongson2.8.2总结Jar包冲突很烦人,Spring框架相关的冲突,有些报错很不明确或者根本不报错就停止服务,这种问题很难定位,开发者要专注于业务开发,不要浪费花的时间太多了,统一版本管理还是很有用的,不然Spring这么牛逼的框架怎么还在用,BOM管理,给大家带来!!!参考:https://howtodoinjava.com/mav...