maven 关于使用 snapshot 的坑
大家好,我是烤鴨:
? ? 今天分享一下maven項目引入"快照"版依賴的問題。
?
1.? snapshot 和 realease
顧名思義 就是 快照和穩(wěn)定版。快照是不穩(wěn)定的開發(fā)版本,不定時更新。穩(wěn)定版不會有這個問題。
不定時更新有什么危害。
maven install 或者package 的時候,如果 pom中依賴的版本是快照版,會從私服或者中央倉庫同步一下快照版本的jar包。如果這個時候jar包作者 恰好 deploy了未經(jīng)測試或者改動了代碼(未兼容之前的代碼),就會影響到當前項目。
maven 穩(wěn)定包倉庫:
https://mvnrepository.com/
快照包倉庫:
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/
我們看下這三個包的發(fā)布時間,是 2020.1.20 . 11點12點和16點分別發(fā)布了。
pom文件的配置。
這里強調(diào)一下 updatePolicy 屬性。
(默認) always 每次打包都會看遠程是否有新包
daily 當天拉過就不會再拉了
interval 指定時間間隔
never 永不(當穩(wěn)定版使用)
<!--指定遠程倉庫地址 --><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>簡單來說,當你項目里配置了快照版,如果更新的內(nèi)容恰好不兼容之前的代碼(方法刪了或者換參數(shù)了),就會導(dǎo)致項目的災(zāi)難問題。以上面的為例,可能11:30 之前項目是沒問題的,這時候快照倉庫發(fā)了一個版本,重新打包之后,項目就起不來了。
?
3.? 實際項目遇到的情況
運行正常的項目,代碼沒改動什么,突然報錯類找不到。
跟對方溝通,才發(fā)現(xiàn)我們引入的是快照版,這個可太危險了...
4.? 總結(jié)
其實我們這個還好,之前遇到過引用 springboot 快照版的時候,測試都正常,上線的時候一直啟動失敗。。。
最后發(fā)現(xiàn)是發(fā)布了新的快照版,而且對之前的方法有改動,快照可以在聯(lián)調(diào)的時候使用,生產(chǎn)千萬別用。?
總結(jié)
以上是生活随笔為你收集整理的maven 关于使用 snapshot 的坑的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ngix莫名挂掉 signal proc
- 下一篇: Makefile 教程