maven依赖能省略版本号吗?--不能

在maven项目中,依赖的版本号是不能省略的。即使在某些情况下,如Spring Boot项目,依赖版本可能在`dependencyManagement`或父POM中定义,但这并不意味着可以省略版本号。依赖版本的管理有助于保持一致性并避免冲突,Spring Boot的`spring-boot-starter-parent`父POM就是一个版本仲裁中心,它管理了包括Jackson在内的依赖版本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

普通maven项目

maven导入依赖时,可以省略版本号吗?

答案是不可以。maven坐标三要素gav缺一不可。

 <dependency>
     <groupId>com.fasterxml.jackson.core</groupId>
     <artifactId>jackson-databind</artifactId>
     <version>2.10.4</version>
 </dependency>

为什么很多时候没有看到版本号?

举个例子:Jackson是一个处理JSON的类库,它可以进行JSON和Java对象转换,核心模块由三部分组成,
其中databind包含了annotations和core的依赖,只需要导入databind即可。

  • jackson-databind
  • jackson-annotations
  • jackson-core

jackson-core的依赖

   <dependency>
     <groupId>com.fasterxml.jackson.core</groupId>
     <artifactId>jackson-annotations</artifactId>
     <version>${jackson.version.annotations}</version>
   </dependency>

jackson-annotations的依赖

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>${jackson.version.core}</version>
    </dependency>

为什么这两个依赖都没写版本号?
在spring中,用${}可以取xml文件的properties标签里的内容,说明版本号写在databind上了。

  <parent>
    <groupId>com.fasterxml.jackson</groupId>
    <artifactId>jackson-base</artifactId>
    <version>2.10.4</version>
  </parent>

databind里有一段parent标签,点进去

  <parent>
    <groupId>com.fasterxml.jackson</groupId>
    <artifactId>jackson-bom</artifactId>
    <version>2.10.4</version>
  </parent>

发现又有一段parent标签,再点进去
在这里插入图片描述
复习一下dependencyManagement的用法:
dependencyManagement 元素提供了一种管理依赖版本号的方式。在dependencyManagement元素中声明所依赖的jar包的版本号等信息,那么所有子项目再次引入此依赖jar包时则无需显式的列出版本号。Maven会沿着父子层级向上寻找拥有dependencyManagement 元素的项目,然后使用它指定的版本号。

再看看依赖中还有什么
在这里插入图片描述
原来版本号全都写死了,当你决定引入2.10.4的
jackson-databind时,其他相关的依赖的版本号写的都是2.10.4

 <dependency>
     <groupId>com.fasterxml.jackson.core</groupId>
     <artifactId>jackson-databind</artifactId>
     <version>2.10.4</version>
 </dependency>

springboot项目-版本仲裁中心

新建一个新的springboot项目,然后添加两个依赖

  • jackson-databind
  • spring-boot-starter
<dependencies>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    </dependency>
     <dependency>
	     <groupId>org.springframework.boot</groupId>
	     <artifactId>spring-boot-starter-test</artifactId>
	     <scope>test</scope>
 	</dependency>
</dependencies>

没有写版本号居然也没报错!
而且我测试了下,可以正常java对象转json对象。
查看maven,显示了版本号。
在这里插入图片描述
肯定是偷偷在哪个地方加上了版本号,嫌疑最大就是——创建springboot时自带的parent
在这里插入图片描述
点进去,看看有什么东西
在这里插入图片描述
描述上说:Panent是来管理依赖和插件的,具体怎么管理的呢?点进去继续查看
在这里插入图片描述
看到propreties,不出所料就是它了。
propreties标签指定了最里面的jackson.version的版本号
在这里插入图片描述
请注意:pom文件的maven坐标我只填了ga,没有填version。说明真正发挥作用的是dependencyManagement 版本仲裁中心。

在这里插入图片描述
dependencyManagement 元素提供了一种管理依赖版本号的方式。在dependencyManagement元素中声明所依赖的jar包的版本号等信息,那么所有子项目再次引入此依赖jar包时则无需显式的列出版本号。Maven会沿着父子层级向上寻找拥有dependencyManagement 元素的项目,然后使用它指定的版本号。

结论:maven坐标中是不能省略版本号的。当没看到版本号时,可能是以dependencyManagement的方式藏在版本仲裁中心。

spring-boot-starter-web依赖启动器的主要作用是提供Web开发场景所需的底层所有依赖。
所以,在pom.xml中引入spring-boot-starter-web依赖启动器时,就可以实现Web场景开发,而不需要额外导入Tomcat服务器以及其他Web依赖文件等。当然,这些引入的依赖文件的版本号还是由spring-boot-starter-parent父依赖进行的统一管理。
在这里插入图片描述
其中就有jackson,在springboot中可以直接使用。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值