Springboot项目中Maven Plugin各个插件的版本控制

如果在pom文件的依赖或者插件中没有指定版本号,maven会拉取一个默认版本,这个版本从哪里获得到的?

答案是parent,parent里没有那就去parent的parent里找,总之在它的祖先里找。

在springboot项目中,一般会有个顶级父亲,会为开发者提供常用jar的版本管理,所以不指定版本,就会使用人家提供好的。当然,指定也是可以的,这会覆盖官方默认的版本。父亲不一定是一个封闭的超级项目,也可能只是一组合适的定义。

在一次Springboot项目编译过程中,插件版本报错,项目pom文件里没有指定插件版本,这个版本是从哪里来的呢?经过一番查找,终于找到了声明版本的pom.xml文件。

spring boot 项目中的plugin版本是在框架中连续依赖定义的

从该项目的parent的parent开始:

<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.2.2.RELEASE</version>
		<relativePath/> 
</parent>

按照下面的顺序连续往上找:

 spring-boot-starter-parent——>spring-boot-dependencies

<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-dependencies</artifactId>
		<version>2.2.2.RELEASE</version>
		<relativePath> ../../spring-boot-dependencies</relativePath>
</parent>

进入spring-boot-dependencies的pom文件里,便能看到指定的插件版本了,和idea中显示的插件版本一致。

如果项目的一个依赖项还依赖于其他jar,该jar指定了一个版本,则该版本被采用。 Maven 有一种名为传递依赖关系的机制。如果没有显式指定依赖项的版本,它将搜索依赖关系树并使用树中的最近定义。如果有两个最近的定义,则第一个声明的获胜。

官方文档解释https://docs.spring.io/spring-boot/docs/current/reference/html/using-spring-boot.html#using-boot-build-systems

“正常项目,最好都写上,不写具体版本号时,如果项目复杂度较低,依赖的开源项目少,那就还好。如果项目复杂度高,依赖了很多的大的开源项目,那这些项目里自身又依赖了其它jar时,内部依赖jar极有可能出现版本冲突问题。在版本冲突出现时,早期不写具体版本号的写法,就会发现坑到死。

jar冲突,综合到具体版本上,才能针对性的引入某个老版本,哪个新版本绕过去,甚至选择屏蔽哪个,都是要经过多次试验和研究的。动态无版本号写法,研究个p,过两天构建出的依赖jar也许版本又变了。在ide工具或者eclipse中体现不出这个问题,引入集成构建,这种问题就都出来了。各种“unknow-version”,各种“jar is missing”

 

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值