您好!
欢迎来到京东云开发者社区
登录
首页
博文
课程
大赛
工具
用户中心
开源
首页
博文
课程
大赛
工具
开源
更多
用户中心
开发者社区
>
博文
>
统一管理jar包版本的工具: Maven BOM
分享
打开微信扫码分享
点击前往QQ分享
点击前往微博分享
点击复制链接
统一管理jar包版本的工具: Maven BOM
kansting
2023-07-20
IP归属:北京
8640浏览
## BOM是什么 BOM全称Bill Of Materials,中文是材料清单。POM自身只支持单继承,BOM的作用就行进行统一的包版本管理。尤其适合解决对于微服务架构下,需要统一多个服务jar包版本的诉求。 开源的RPC组件Dubbo就提供了这样一份BOM:[dubbo-dependencies-bom](https://github.com/apache/dubbo/tree/3.1/dubbo-dependencies-bom) ## BOM有什么 BOM并不是特殊的技术或者组件,其仅仅是一份pom文件,核心是在`<dependencyManagement/>`节点中添加不同jar包的maven坐标。其他项目使用bom后,再引用bom中包含的jar时,就不需要显示的指定jar包版本了。 ```xml <project...> <modelVersion>4.0.0</modelVersion> <groupId>com.jd.open</groupId> <artifactId>open-bom</artifactId> <version>1.0.0-SNAPSHOT</version> <packaging>pom</packaging> <description>parent pom</description> <dependencyManagement> <dependencies> <dependency> <groupId>test</groupId> <artifactId>a</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>test</groupId> <artifactId>b</artifactId> <version>1.0</version> <scope>compile</scope> </dependency> <dependency> <groupId>test</groupId> <artifactId>c</artifactId> <version>1.0</version> <scope>compile</scope> </dependency> </dependencies> </dependencyManagement> </project> ``` ## BOM的引用 BOM使用有两种方式,可以通过`<parent/>`节点继承: ```xml <project ...> <modelVersion>4.0.0</modelVersion> <groupId>com.jd</groupId> <artifactId>Test</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <parent> <groupId>com.jd.open</groupId> <artifactId>open-bom</artifactId> <version>1.0.0-SNAPSHOT</version> </parent> </project> ``` 也可以在`<dependencyManagement/>`中引用 ```xml <project ...> <modelVersion>4.0.0</modelVersion> <groupId>com.jd</groupId> <artifactId>Test</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <dependencyManagement> <dependencies> <dependency> <groupId>com.jd.open</groupId> <artifactId>open-bom</artifactId> <version>1.0.0-SNAPSHOT</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> </project> ``` ## **Maven的版本依赖优先顺序** 1. 直接在当前工程中显示指定的版本 2. `<parent/>`中配置的父工程使用的版本 3. 在当前工程中通过`<dependencyManagement/>`引入的BOM清单中的版本,当引入的多个BOM都有对应jar包时,先引入的BOM生效 4. 上述三个地方都没配置,则启用依赖调解机制 ## Maven的依赖调解机制 `A -> B -> C -> D(1.4)` `A -> E -> D(1.0) ` 如果A工程引用了B和E两个jar包,B和E底层又都依赖了D且是不同版本,那么A引用D时,但最终会采用引用路径更近的jar包版本,即1.0
上一篇:【架构与设计】分布式数据库架构类别和主流方案
下一篇:搜狗输入法双击输入框崩溃问题
kansting
文章数
10
阅读量
21655
作者其他文章
01
从原理聊JVM(四):JVM中的方法调用原理
1 引言多态是Java语言极为重要的一个特性,可以说是Java语言动态性的根本,那么线程执行一个方法时到底在内存中经历了什么,JVM又是如何确定方法执行版本的呢?2 栈帧JVM中由栈帧存储方法的局部变量表、操作数栈、动态连接和方法返回地址等信息。每一个方法的调用就是从入栈到出栈到过程。2.1 局部变量表局部变量表由变量槽组成,《Java虚拟机规范》指出:“每个变量槽都应该能存放一个boolean、
01
从原理聊JVM(三):详解现代垃圾回收器Shenandoah和ZGC
ShenandoahShenandoah一词来自于印第安语,十九世纪四十年代有一首著名的航海歌曲在水手中广为流传,讲述一位年轻富商爱上印第安酋长Shenandoah的女儿的故事。后来美国有一条位于Virginia州西部的小河以此命名,所以Shenandoah的中文译名为“情人渡”。Shenandoah首次出现在Open JDK12中,是由Red Hat开发,主要为了解决之前各种垃圾回收器处理大堆时
01
【架构与设计】常见微服务分层架构的区别和落地实践
前言从强调内外隔离的六边形架构,逐渐发展衍生出的层层递进、注重领域模型的洋葱架构,再到和DDD完美契合的整洁架构。架构风格的不断演进,其实就是为了适应软件需求越来越复杂的特点。可以看到,越现代的架构风格越倾向于清晰的职责定位,且让领域模型成为架构的核心。基于这些架构风格,在软件架构设计过程中又有非常多的架构分层模型。传统三层架构传统服务通常使用三层架构:门面层:作为服务暴露的入口,处理所有的外部请
01
从原理聊JVM(一):染色标记和垃圾回收算法
系列文章: 从原理聊JVM(二):从串行收集器到分区收集开创者G1 从原理聊JVM(三):详解现代垃圾回收器Shenandoah和ZGC 1 JVM运行时内存划分1.1 运行时数据区域方法区 属于共享内存区域,存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。运行时常量池,属于方法区的一部分,用于存放编译期生成的各种字面量和符号引用。 JDK1.8之前,Hot
kansting
文章数
10
阅读量
21655
作者其他文章
01
从原理聊JVM(四):JVM中的方法调用原理
01
从原理聊JVM(三):详解现代垃圾回收器Shenandoah和ZGC
01
【架构与设计】常见微服务分层架构的区别和落地实践
01
从原理聊JVM(一):染色标记和垃圾回收算法
添加企业微信
获取1V1专业服务
扫码关注
京东云开发者公众号