程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2023-05(1)

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

发布于2021-05-29 23:14     阅读(412)     评论(0)     点赞(16)     收藏(3)


普通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中可以直接使用。
在这里插入图片描述



所属网站分类: 技术文章 > 博客

作者:举起你的手来

链接:http://www.javaheidong.com/blog/article/207946/d3fc3baca5f5418fe95a/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

16 0
收藏该文
已收藏

评论内容:(最多支持255个字符)