如果在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各个插件的版本控制相关推荐

  1. 关于idea中的springboot项目配置maven仓库和插件下载加速

    在Springboot里面的pom文件中加上 <!--maven仓库国内镜像--> <repositories><repository><id>nexu ...

  2. SpringBoot12 QueryDSL01之QueryDSL介绍、springBoot项目中集成QueryDSL、利用QueryDSL实现单表RUD、新增类初始化逻辑...

    1 QueryDSL介绍 1.1 背景 QueryDSL的诞生解决了HQL查询类型安全方面的缺陷:HQL查询的扩展需要用字符串拼接的方式进行,这往往会导致代码的阅读困难:通过字符串对域类型和属性的不安 ...

  3. SpringBoot 项目中集成 Prometheus 和 Grafana

    项目上线后,除了能保障正常运行以外,也需要服务运行的各个指标进行监控,例如 服务器CPU.内存使用占比,Full GC 执行时间等,针对一些指标出现异常,可以加入一些报警机制能及时反馈给开发运维.这样 ...

  4. (RabbitMQ 二)Springboot项目中使用RabbitMQ的相关依赖

    (RabbitMQ 二)Springboot项目中使用RabbitMQ的相关依赖 RabbitMQ系列文章如下: (RabbitMQ 一[转载])windows10环境下的RabbitMQ安装步骤 h ...

  5. SpringBoot项目中集成第三方登录功能

    SpringBoot项目中集成第三方登录功能 引言 1 环境准备 2 代码实现 3 第三方平台认证申请 4 打包和部署项目 5 第三方平台登录认证测试 6 参考文章 引言 最近想把自己在公众号上介绍过 ...

  6. 使用IDEA在SpringBoot项目中连接数据库

    使用IDEA在SpringBoot项目中连接数据库 文章目录 使用IDEA在SpringBoot项目中连接数据库 前言 连接数据库 正常操作数据库 移除数据库连接 前言 每次我在 IDEA 中用 Sp ...

  7. springboot项目中使用shiro 自定义过滤器和token的方式___shiro使用token登录流程

    springboot项目中使用shiro 自定义过滤器和token的方式 实现步骤主要是以下几步: 1. 在项目中导入maven依赖 <dependency><groupId> ...

  8. 基于springboot项目中使用docker-compose+es+kibana+logstash+mysql 提高数据查询效率

    基于springboot项目中使用docker-compose+es+kibana+logstash+mysql 提高数据查询效率 1.拉取logstash,kibana,es,mysql镜像 #命令 ...

  9. 在SpringBoot项目中使用Ureport2报表工具

    SpringBoot项目中使用Ureport2报表工具 1.在spring boot项目中使用Ureport2报表工具,首先需要在maven的pom.xml中添加Ureport2的依赖. <!- ...

  10. 根据自动装配原理在Springboot项目中自定义starter,并实现热插拔技术,自定义@enable

    根据自动装配原理在Springboot项目中自定义starter,并实现热插拔技术 自定义starter 简单步骤 使用测试 优化(热插拔技术) 自定义starter 简单步骤 创建项目,并引入aut ...

最新文章

  1. gpgpu-sim卡分配程序设计实例分析
  2. #pragma execution_character_set的意义
  3. git 生成patch和使用patch
  4. 【剑指offer】面试题18:删除链表的节点(Java)
  5. ICWAI和ICWA的完整形式是什么?
  6. php 读取excel转数组中,thinkphp5使用PHPExcel读取excel csv到数组
  7. MPI 自定义通用结构和传输
  8. 李国庆俞渝撕破脸,当当喊话:冲动是魔鬼 冷静下来吧
  9. elipse手机设备显示Target unknown或者offline解决方法
  10. MySQL Server 安装失败
  11. 9. Browser 对象 - Location 对象
  12. c语言函数初始化,c语言初始化输入和输出函数
  13. 云计算和计算机应用的区别,普适计算与云计算的区别
  14. DNS有哪两种域名解析方式?简述这两种方式区别和特点。
  15. Windows下jupyter notebook的安装和使用
  16. 嵌入式有什么值得学习的软硬件技术?
  17. IPV6天窗问题,以及解决方法简述
  18. ocr识别+扫描仪应用方案
  19. 培训有毛用!大会有毛用!
  20. 某程序员吐槽培训班简历造假,应届变三年,拿阿里外包高薪offer

热门文章

  1. 海思35系列型号排行_11月手机性能排行榜:小米10至尊纪念版排名第三
  2. 谁负责本单位的各部门计算机,关于加强计算机校园网管理的若干认识
  3. 框架实现修改功能的原理_从无到有RPC框架 - RPC原理及实现(文末还有开源的优秀RPC框架)...
  4. 微信小程序-强制手机端更新
  5. 修改文件属性与权限(鸟哥linux私房菜)
  6. tmux使用(程序员适用)
  7. Unity3D AssetBundle相关
  8. spring mvc 返回json的配置
  9. 【Andrioid】在Gradle编译时生成一个不同的版本号,动态设置应用程序标题,应用程序图标,更换常数...
  10. Android 使用Fragment,ViewPagerIndicator 制作csdn app主要框架