发布于2021-05-29 23:14 阅读(531) 评论(0) 点赞(16) 收藏(3)
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-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项目,然后添加两个依赖
<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黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 java黑洞网 All Rights Reserved 版权所有,并保留所有权利。京ICP备18063182号-2
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!