为什么在项目中有时候导入dependency时不需要指定版本

创建一个 Spring Boot 项目时:或者是干脆从 https://start.spring.io/ 在线生成 Spring Boot 项目:

我们都会发现 spring-boot-starter-parent 的身影

首先我们可以在idea中ctrl+右键点开父依赖spring-boot-starter-parent

接着ctrl+右键点击spring-boot-dependencies

来到该文件下

可以看见在spring-boot-dependencies里面看到声明了很多第三方依赖的版本。

继续往下滑可以看见使用了dependencyManagement标签,即Maven中的元素提供了一种管理依赖版本号的方式。在dependencyManagement元素中声明所依赖的jar包的版本号等信息,即对这些版本号进行版本锁定,那么所有当子项目再次引入此依赖jar包时则无需显式的列出版本号。Maven会沿着父子层级向上寻找拥有dependencyManagement 元素的项目,然后使用它指定的版本号。而这些依赖的版本号,就是上一张图片里面的properties中对应的版本号,也就是被锁定的版本号

所以例如:在子项目pom文件中需要SpringSecurity依赖

在父项目中ctrl+右键点开父依赖spring-boot-starter-parent->点开spring-boot-dependencies中我们可以看见含有对应的依赖

那么在子项目pom文件引入的时候便可以省略其版本号(dependencyManagement中定义的只是依赖的声明,并不是实现引入,所以子项目需要重新声明需要用的依赖)

但是也不是所有导入的依赖都可以省略版本号,其次如果不想使用dependencyManagement中锁定的版本号,也可以直接在子项目的pom文件中的对应的依赖下加版本号,例如上面的例子直接对子项目中的SpringSecurity依赖加版本号也是可以的。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Maven ,依赖可以不指定版本有以下两种情况: 1. 继承自父 POM:如果项目继承了一个父 POM,而该父 POM 已经声明了某个依赖项的版本号,则在子项目可以不指定该依赖项的版本号。子项目会自动继承父 POM 版本号。例如,以下是一个父 POM 的示例: ```xml <project> <groupId>com.example</groupId> <artifactId>parent</artifactId> <version>1.0.0</version> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>5.3.8</version> </dependency> </dependencies> </project> ``` 在子项目,我们可以这样声明依赖项,而不需要指定版本号: ```xml <project> <parent> <groupId>com.example</groupId> <artifactId>parent</artifactId> <version>1.0.0</version> </parent> <groupId>com.example</groupId> <artifactId>child</artifactId> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> </dependency> </dependencies> </project> ``` 2. 使用 Maven BOM:Maven BOM(Bill of Materials)是一种特殊的 POM 文件,它仅包含依赖项的声明,而不包含任何插件或构建配置。通过在子项目引用 Maven BOM,我们可以统一管理多个依赖项的版本号。在这种情况下,我们可以在依赖项声明指定版本号。例如,以下是一个 Maven BOM 的示例: ```xml <project> <groupId>com.example</groupId> <artifactId>my-bom</artifactId> <version>1.0.0</version> <packaging>pom</packaging> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-framework-bom</artifactId> <version>5.3.8</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </project> ``` 在子项目,我们可以这样引用 Maven BOM,并声明依赖项,而不需要指定版本号: ```xml <project> <groupId>com.example</groupId> <artifactId>my-project</artifactId> <version>1.0.0</version> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <scope>compile</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <scope>compile</scope> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>com.example</groupId> <artifactId>my-bom</artifactId> <version>1.0.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> </project> ``` 总之,如果某个依赖项的版本号已经在项目的父 POM 或 Maven BOM 被声明了,那么在子项目可以不指定该依赖项的版本号。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值