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

网友投稿 663 2022-12-20


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

BOM简介

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文件,区别是对于使用方而言,生效的只有这一个部分。只需要在定义对外发布的客户端版本即可:

xmlns:xsi="http://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">

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/

xmlns:xsi="http://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">

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

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/

项目使用方法

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

com.jlcx.qd

inf-bom

${version}

pom

import

...

在需要使用相关JAR包的pom.xml文件中&lthttp://;dependencies>节点下引入如下:

...

com.google.guava

guava

commons-collections

commons-collections

....

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

...

com.google.guava

guava

commons-collections

commons-collections

3.2.1

....


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:SpringMVC请求/响应乱码问题解决方案解析
下一篇:SpringBoot+Vue+Redis实现单点登录(一处登录另一处退出登录)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~