Springboot项目中Maven Plugin各个插件的版本控制
如果在pom文件的依赖或者插件中没有指定版本号,maven会拉取一个默认版本,这个版本从哪里获得到的?
答案是parent,parent里没有那就去parent的parent里找,总之在它的祖先里找。
在springboot项目中,一般会有个顶级父亲,会为开发者提供常用jar的版本管理,所以不指定版本,就会使用人家提供好的。当然,指定也是可以的,这会覆盖官方默认的版本。父亲不一定是一个封闭的超级项目,也可能只是一组合适的定义。
在一次Springboot项目编译过程中,插件版本报错,项目pom文件里没有指定插件版本,这个版本是从哪里来的呢?经过一番查找,终于找到了声明版本的pom.xml文件。
spring boot 项目中的plugin版本是在框架中连续依赖定义的
从该项目的parent的parent开始:
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.2.RELEASE</version><relativePath/>
</parent>
按照下面的顺序连续往上找:
spring-boot-starter-parent——>spring-boot-dependencies
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.2.2.RELEASE</version><relativePath> ../../spring-boot-dependencies</relativePath>
</parent>
进入spring-boot-dependencies的pom文件里,便能看到指定的插件版本了,和idea中显示的插件版本一致。
如果项目的一个依赖项还依赖于其他jar,该jar指定了一个版本,则该版本被采用。 Maven 有一种名为传递依赖关系的机制。如果没有显式指定依赖项的版本,它将搜索依赖关系树并使用树中的最近定义。如果有两个最近的定义,则第一个声明的获胜。
官方文档解释https://docs.spring.io/spring-boot/docs/current/reference/html/using-spring-boot.html#using-boot-build-systems
“正常项目,最好都写上,不写具体版本号时,如果项目复杂度较低,依赖的开源项目少,那就还好。如果项目复杂度高,依赖了很多的大的开源项目,那这些项目里自身又依赖了其它jar时,内部依赖jar极有可能出现版本冲突问题。在版本冲突出现时,早期不写具体版本号的写法,就会发现坑到死。
jar冲突,综合到具体版本上,才能针对性的引入某个老版本,哪个新版本绕过去,甚至选择屏蔽哪个,都是要经过多次试验和研究的。动态无版本号写法,研究个p,过两天构建出的依赖jar也许版本又变了。在ide工具或者eclipse中体现不出这个问题,引入集成构建,这种问题就都出来了。各种“unknow-version”,各种“jar is missing”
Springboot项目中Maven Plugin各个插件的版本控制相关推荐
- 关于idea中的springboot项目配置maven仓库和插件下载加速
在Springboot里面的pom文件中加上 <!--maven仓库国内镜像--> <repositories><repository><id>nexu ...
- SpringBoot12 QueryDSL01之QueryDSL介绍、springBoot项目中集成QueryDSL、利用QueryDSL实现单表RUD、新增类初始化逻辑...
1 QueryDSL介绍 1.1 背景 QueryDSL的诞生解决了HQL查询类型安全方面的缺陷:HQL查询的扩展需要用字符串拼接的方式进行,这往往会导致代码的阅读困难:通过字符串对域类型和属性的不安 ...
- SpringBoot 项目中集成 Prometheus 和 Grafana
项目上线后,除了能保障正常运行以外,也需要服务运行的各个指标进行监控,例如 服务器CPU.内存使用占比,Full GC 执行时间等,针对一些指标出现异常,可以加入一些报警机制能及时反馈给开发运维.这样 ...
- (RabbitMQ 二)Springboot项目中使用RabbitMQ的相关依赖
(RabbitMQ 二)Springboot项目中使用RabbitMQ的相关依赖 RabbitMQ系列文章如下: (RabbitMQ 一[转载])windows10环境下的RabbitMQ安装步骤 h ...
- SpringBoot项目中集成第三方登录功能
SpringBoot项目中集成第三方登录功能 引言 1 环境准备 2 代码实现 3 第三方平台认证申请 4 打包和部署项目 5 第三方平台登录认证测试 6 参考文章 引言 最近想把自己在公众号上介绍过 ...
- 使用IDEA在SpringBoot项目中连接数据库
使用IDEA在SpringBoot项目中连接数据库 文章目录 使用IDEA在SpringBoot项目中连接数据库 前言 连接数据库 正常操作数据库 移除数据库连接 前言 每次我在 IDEA 中用 Sp ...
- springboot项目中使用shiro 自定义过滤器和token的方式___shiro使用token登录流程
springboot项目中使用shiro 自定义过滤器和token的方式 实现步骤主要是以下几步: 1. 在项目中导入maven依赖 <dependency><groupId> ...
- 基于springboot项目中使用docker-compose+es+kibana+logstash+mysql 提高数据查询效率
基于springboot项目中使用docker-compose+es+kibana+logstash+mysql 提高数据查询效率 1.拉取logstash,kibana,es,mysql镜像 #命令 ...
- 在SpringBoot项目中使用Ureport2报表工具
SpringBoot项目中使用Ureport2报表工具 1.在spring boot项目中使用Ureport2报表工具,首先需要在maven的pom.xml中添加Ureport2的依赖. <!- ...
- 根据自动装配原理在Springboot项目中自定义starter,并实现热插拔技术,自定义@enable
根据自动装配原理在Springboot项目中自定义starter,并实现热插拔技术 自定义starter 简单步骤 使用测试 优化(热插拔技术) 自定义starter 简单步骤 创建项目,并引入aut ...
最新文章
- gpgpu-sim卡分配程序设计实例分析
- #pragma execution_character_set的意义
- git 生成patch和使用patch
- 【剑指offer】面试题18:删除链表的节点(Java)
- ICWAI和ICWA的完整形式是什么?
- php 读取excel转数组中,thinkphp5使用PHPExcel读取excel csv到数组
- MPI 自定义通用结构和传输
- 李国庆俞渝撕破脸,当当喊话:冲动是魔鬼 冷静下来吧
- elipse手机设备显示Target unknown或者offline解决方法
- MySQL Server 安装失败
- 9. Browser 对象 - Location 对象
- c语言函数初始化,c语言初始化输入和输出函数
- 云计算和计算机应用的区别,普适计算与云计算的区别
- DNS有哪两种域名解析方式?简述这两种方式区别和特点。
- Windows下jupyter notebook的安装和使用
- 嵌入式有什么值得学习的软硬件技术?
- IPV6天窗问题,以及解决方法简述
- ocr识别+扫描仪应用方案
- 培训有毛用!大会有毛用!
- 某程序员吐槽培训班简历造假,应届变三年,拿阿里外包高薪offer
热门文章
- 海思35系列型号排行_11月手机性能排行榜:小米10至尊纪念版排名第三
- 谁负责本单位的各部门计算机,关于加强计算机校园网管理的若干认识
- 框架实现修改功能的原理_从无到有RPC框架 - RPC原理及实现(文末还有开源的优秀RPC框架)...
- 微信小程序-强制手机端更新
- 修改文件属性与权限(鸟哥linux私房菜)
- tmux使用(程序员适用)
- Unity3D AssetBundle相关
- spring mvc 返回json的配置
- 【Andrioid】在Gradle编译时生成一个不同的版本号,动态设置应用程序标题,应用程序图标,更换常数...
- Android 使用Fragment,ViewPagerIndicator 制作csdn app主要框架