专栏首页Java全栈SpringBoot内置依赖不加版本号是什么原理

SpringBoot内置依赖不加版本号是什么原理

​为什么有些依赖需要加版本号,有些依赖不需要加版本号?不加版本号的依赖,版本号都写在哪里了呢?一起看看吧!

1. 内置的依赖可以不加版本号

我们在使用SpringBoot引入依赖时,有些时候要加版本号,有些时候又不需要,这是为什么呢?如下:

SpringBoot内置了很多依赖,引入这些内置的依赖时不需要加版本号,相反,如果手动加上不兼容版本号还可能引起程序异常。

那么怎么找到这些版本号呢?

2. 版本号写在哪里呢

在SpringBoot项目根目录下pom.xml里面,有一个parent节点,所以我们本地搭建的SpringBoot项目,其实是一个Maven父子项目。

可以按住Ctrl+鼠标左键点击artifactId,就可以进到父pom,如下图:

进去后,发现里面又有一个parent节点,一样的,按住Ctrl+鼠标左键点击artifactId,如下图:

SpringBoot内置的各种依赖的版本号,就写在这个文件里

3. Maven父子项目的搭建

一般我们在建微服务应用的时候,都需要搭建Maven父子模块,搭建起来并不难,项目结构如下:

父文件夹
  - pom.xml(使用module管理所有子模块)
  - 子文件夹
    - pom.xml(使用parent指向父pom)

4. 父项目依赖管理

正常情况,我们会把所有的依赖交给父pom来管理,所有的版本号都写在父pom里,子pom不需要加版本号,就跟使用SpringBoot内置依赖一样。

需要管理的依赖,都放在父pom的dependencyManagement节点下,经常有小伙伴放错位置,如下图:

注意:在父pom里增加依赖时,不会马上去远程仓库下载,如果你本地没有下载过这个依赖,此时依赖会标红,不用管。在子pom里引入依赖后,才真正去下载。

这个很好理解,就像SpringBoot,内置了很多依赖,初始时并不会把所有依赖都下载到本地,而是我们引入哪个,才去下载哪个。

5. 总结Maven父子项目知识点

  1. 在父pom里定义版本号,子pom不需要加版本号
  2. 父pom引入依赖时不会去下载,只有子pom也引入依赖时才真正去下载
  3. 在多模块项目中,父pom负责统一管理所有依赖的版本号

6. 高频面试题

Q:Maven的坐标是个什么概念?

A:我们平常看到的groupId、artifactId、version节点,其实就是Maven的坐标,通过这些坐标,可以唯一定位一个Jar包。

Q:Maven如何进行多模块管理?

A:参照第3点,父pom使用module来管理所有子模块,子pom通过parent来标识父模块

Q:多模块应用如何管理版本号?

A:在父pom里使用dependencyManagement统一管理版本号

Q:接上题,为什么要统一管理版本号?

A:不使用父pom统一管理也可以,每个子pom可以自己引入带版本号的依赖,但是后期很难维护,每个模块引入的版本号可能都不一样,容易出现兼容性问题。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 《springboot实战》

    大致翻了一下《springboot实战》这一本书,相比之前的文章,总体来说,没有什么干货,实战感觉也谈不上。仅当一本普通的科普读物,记录一下学习笔记。看完可以了...

    kinnylee
  • 2020最新总结,大厂常问的SpringBoot高频面试题(30题+答案+学习导图)

    下面是小编关于SpringBoot的知识点总结了一个思维导图,希望对大家所有帮助!

    程序员白楠楠
  • SpringBoot30个问题

    链接:https://blog.csdn.net/qq_14958051/article/details/106568520

    Java小咖秀
  • Spring Boot面试题(2021最新版)

    在微服务理念席卷程序界的今天,作为最主流语言 Java 的一名 Coder,如何能正确的、系统的、快速的掌握 Spring Boot是至关重要的。接下来,让我们...

    Java程序猿
  • SpringBoot内置的各种Starter是怎样构建的?--SpringBoot源码(六)

    本篇接 外部配置属性值是如何被绑定到XxxProperties类属性上的?--SpringBoot源码(五)

    源码笔记
  • SpringBoot原理

    spring-boot-starter:spring-boot场景启动器,帮我们导入了web模块正常运行所依赖的组件;

    DataScience
  • SpringBoot知识点一网打尽(内附面试必问)

        SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置...

    XiaoLin_Java
  • javaweb-springboot-2-73

    https://spring.io/projects/spring-boot 有助于开发工程,减少配置,使得开发者更关注于业务实现而非技术配置,创建java应...

    全栈程序员站长
  • Spring Boot入门篇

    很长时间不写博客了,究其原因则是这几个月工作及生活都发生了很多事情,导致不得分心处理这些。最近难得忙里偷闲,决定还是继续更新吧。毕竟一件事情做久了,如果突然中断...

    吉林乌拉
  • 01: springboot快速入门之三分钟构建可运行项目

    Spring Boot英文中是“引导”的意思,是用来简化Spring应用的搭建到开发的过程。可以这么说。SpringBoot是一个服务于框架的框架,服务范围是简...

    java进阶架构师
  • 面试官:给我讲讲SpringBoot的依赖管理和自动配置?

    从Spring转到SpringBoot的xdm应该都有这个感受,以前整合Spring + MyBatis + SpringMVC我们需要写一大堆的配置文件,堪称...

    秃头哥编程
  • SpringBoot整合Flyway完成数据库持久化迭代更新

    每次服务的代码更新部署,难免会存在数据库结构的变更以及字典数据的添加,手动执行更新脚本是一个耗时耗力的工作,而且还会出现遗漏或者其他状况,SpringBoot内...

    恒宇少年
  • Maven BOM!拿来吧你

    BOM(Bill of Materials)是由Maven提供的功能,它通过定义一整套相互兼容的jar包版本集合,

    你呀不牛
  • 编写自己的SpringBoot-starter

    我们都知道可以使用 SpringBoot 快速的开发基于 Spring 框架的项目。由于围绕 SpringBoot 存在很多开箱即用的 Starter 依赖,使...

    java思维导图
  • (二) SpringBoot起飞之路-入门原理分析

    这是第二篇,关于前一篇入门涉及到的一些基本原理讲解,有兴趣的朋友可以去了解一下前一篇

    BWH_Steven
  • 2020[最全]-SpringBoot讲解(最优雅-最精美-最详细)

    11 编写controller运行就好了 访问 localhost:8080//hello

    CaesarChang张旭
  • SpringBoot 源码解析——源码下载

    fork 之后自己的仓库有一个 spring-boot 项目,地址是:https://github.com/zhisheng17/spring-boot.gi...

    zhisheng
  • 什么是springboot

    这是一篇更专注于介绍springboot的简短文章,我们将讨论“什么是springboot”? 以及springboot如何帮助构建基于Java的企业应...

    叔牙
  • SpringBoot打成war包在tomcat或wildfly下运行

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    程序新视界

扫码关注云+社区

领取腾讯云代金券