大家好,我是烤鸭:
今天分享一下maven项目引入"快照"版依赖的问题。
1. snapshot 和 realease
顾名思义 就是 快照和稳定版。快照是不稳定的开发版本,不定时更新。稳定版不会有这个问题。
不定时更新有什么危害。
maven install 或者package 的时候,如果 pom中依赖的版本是快照版,会从私服或者中央仓库同步一下快照版本的jar包。如果这个时候jar包作者 恰好 deploy了未经测试或者改动了代码(未兼容之前的代码),就会影响到当前项目。
maven 稳定包仓库:
快照包仓库:
https://repo.spring.io/snapshot/
2. 举个栗子
我们以 spring-boot-parent 这个包为例,下面是这个版本 2.2.4.BUILD-SNAPSHOT 快照包地址
https://repo.spring.io/snapshot/org/springframework/boot/spring-boot-parent/2.2.4.BUILD-SNAPSHOT/
我们看下这三个包的发布时间,是 2020.1.20 . 11点12点和16点分别发布了。
pom文件的配置。
这里强调一下 updatePolicy 属性。
(默认) always 每次打包都会看远程是否有新包
daily 当天拉过就不会再拉了
interval 指定时间间隔
never 永不(当稳定版使用)
<!--指定远程仓库地址 -->
<repositories>
<repository>
<id>spring-snapshots</id>
<url>https://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
<repository>
<id>spring-milestones</id>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
</snapshots>
</repository>
</repositories>
简单来说,当你项目里配置了快照版,如果更新的内容恰好不兼容之前的代码(方法删了或者换参数了),就会导致项目的灾难问题。以上面的为例,可能11:30 之前项目是没问题的,这时候快照仓库发了一个版本,重新打包之后,项目就起不来了。
3. 实际项目遇到的情况
运行正常的项目,代码没改动什么,突然报错类找不到。
跟对方沟通,才发现我们引入的是快照版,这个可太危险了...
4. 总结
其实我们这个还好,之前遇到过引用 springboot 快照版的时候,测试都正常,上线的时候一直启动失败。。。
最后发现是发布了新的快照版,而且对之前的方法有改动,快照可以在联调的时候使用,生产千万别用。