摘要: 原创出处 sf.gg/a/1190000021198564 「飘渺Jam」欢迎转载,保留摘要,谢谢!
为什么要使用BOM?
如何定义BOM?
项目使用方法?
BOM(Bill of Materials)是由Maven提供的功能,它通过定义一整套相互兼容的jar包版本集合,使用时只需要依赖该BOM文件,即可放心的使用需要的依赖jar包,且无需再指定版本号。BOM的维护方负责版本升级,并保证BOM中定义的jar包版本之间的兼容性。
使用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/
...
commons-collections
commons-collections
....
commons-collections
commons-collections
3.2.1
....
WX 搜索《醉鱼Java》,回复面试,获取2024面试资料。
如果这篇文章对您有所帮助或者启发,帮忙点个关注叭,您的支持是我坚持写作的最大动力。
求一键三连:点赞、转发、在看。
谢谢支持哟 !
