Maven中的SnapShot版本和正式版本的區(qū)別
Maven中建立的依賴管理方式基本已成為Java語言依賴管理的事實標準,Maven的替代者Gradle也基本沿用了Maven的依賴管理機制。在Maven依賴管理中,唯一標識一個依賴項是由該依賴項的三個屬性構成的,分別是groupId、artifactId以及version。這三個屬性可以唯一確定一個組件(Jar包或者War包)。
其實在Nexus倉庫中,一個倉庫一般分為public(Release)倉和SNAPSHOT倉,前者存放正式版本,后者存放快照版本。如果在項目配置文件中(無論是build.gradle還是pom.xml)指定的版本號帶有'-SNAPSHOT'后綴,比如版本號為'Junit-4.10-SNAPSHOT',那么打出的包就是一個快照版本。
快照版本和正式版本的主要區(qū)別在于,本地獲取這些依賴的機制有所不同。假設你依賴一個庫的正式版本,構建的時候構建工具會先在本次倉庫中查找是否已經(jīng)有了這個依賴庫,如果沒有的話才會去遠程倉庫中去拉取。所以假設你發(fā)布了Junit-4.10.jar到了遠程倉庫,有一個項目依賴了這個庫,它第一次構建的時候會把該庫從遠程倉庫中下載到本地倉庫緩存,以后再次構建都不會去訪問遠程倉庫了。所以如果你修改了代碼,向遠程倉庫中發(fā)布了新的軟件包,但仍然叫Junit-4.10.jar,那么依賴這個庫的項目就無法得到最新更新。你只有在重新發(fā)布的時候升級版本,比如叫做Junit-4.11.jar,然后通知依賴該庫的項目組也修改依賴版本為Junit-4.11,這樣才能使用到你最新添加的功能。
這種方式在團隊內(nèi)部開發(fā)的時候會變的特別蛋痛。假設有兩個小組負責維護兩個組件,example-service和example-ui,其中example-ui項目依賴于example-service。而這兩個項目每天都會構建多次,如果每次構建你都要升級example-service的版本,那么你會瘋掉。這個時候SNAPSHOT版本就派上用場了。每天日常構建時你可以構建example-service的快照版本,比如example-service-1.0-SNAPSHOT.jar,而example-ui依賴該快照版本。每次example-ui構建時,會優(yōu)先去遠程倉庫中查看是否有最新的example-service-1.0-SNAPSHOT.jar,如果有則下載下來使用。即使本地倉庫中已經(jīng)有了example-service-1.0-SNAPSHOT.jar,它也會嘗試去遠程倉庫中查看同名的jar是否是最新的。有的人可能會問,這樣不就不能充分利用本地倉庫的緩存機制了嗎?別著急,Maven比我們想象中的要聰明。在配置Maven的Repository的時候中有個配置項,可以配置對于SNAPSHOT版本向遠程倉庫中查找的頻率。頻率共有四種,分別是always、daily、interval、never。當本地倉庫中存在需要的依賴項目時,always是每次都去遠程倉庫查看是否有更新,daily是只在第一次的時候查看是否有更新,當天的其它時候則不會查看;interval允許設置一個分鐘為單位的間隔時間,在這個間隔時間內(nèi)只會去遠程倉庫中查找一次,never是不會去遠程倉庫中查找(這種就和正式版本的行為一樣了)。
Maven版本的配置方式為:
<repository> <id>myRepository</id> <url>...</url> <snapshots> <enabled>true</enabled> <updatePolicy>XXX</updatePolicy> </snapshots> </repository>
其中updatePolicy就是那4種類型之一。如果配置間隔時間更新,可以寫作interval:XX(XX是間隔分鐘數(shù))。daily配置是默認值。
而在Gradle,可以設置本地緩存的更新策略。
configurations.all { // check for updates every build resolutionStrategy.cacheChangingModulesFor 0,'seconds' }
當然也可以按照分鐘或者小時來設置.
configurations.all { resolutionStrategy.cacheChangingModulesFor 10, ‘minutes' } configurations.all { resolutionStrategy.cacheChangingModulesFor 4, ‘hours' }
所以一般在開發(fā)模式下,我們可以頻繁的發(fā)布SNAPSHOT版本,以便讓其它項目能實時的使用到最新的功能做聯(lián)調;當版本趨于穩(wěn)定時,再發(fā)布一個正式版本,供正式使用。當然在做正式發(fā)布時,也要確保當前項目的依賴項中不包含對任何SNAPSHOT版本的依賴,保證正式版本的穩(wěn)定性。
到此這篇關于Maven中的SnapShot版本和正式版本的區(qū)別的文章就介紹到這了,更多相關Maven SnapShot版本和正式版本內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java 根據(jù)某個 key 加鎖的實現(xiàn)方式
日常開發(fā)中,有時候需要根據(jù)某個 key 加鎖,確保多線程情況下,對該 key 的加鎖和解鎖之間的代碼串行執(zhí)行,這篇文章主要介紹了Java 根據(jù)某個 key 加鎖的實現(xiàn)方式,需要的朋友可以參考下2023-03-03mybatis-plus?執(zhí)行insert(),實體的id自動更新問題
這篇文章主要介紹了mybatis-plus?執(zhí)行insert(),實體的id自動更新問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12解決SpringBoot整合MybatisPlus分模塊管理遇到的bug
這篇文章主要介紹了解決SpringBoot整合MybatisPlus分模塊管理遇到的bug,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07java+vue3+el-tree實現(xiàn)樹形結構操作代碼
基于springboot + vue3 elementPlus實現(xiàn)樹形結構數(shù)據(jù)的添加、刪除和頁面展示,本文通過示例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧2024-06-06解決mybatis使用char類型字段查詢oracle數(shù)據(jù)庫時結果返回null問題
這篇文章主要介紹了mybatis使用char類型字段查詢oracle數(shù)據(jù)庫時結果返回null問題的解決方法,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2018-06-06Spring Boot 參數(shù)校驗的具體實現(xiàn)方式
這篇文章主要介紹了Spring Boot 參數(shù)校驗的具體實現(xiàn)方式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-06-06SpringBoot實現(xiàn)定時任務動態(tài)管理示例
這篇文章主要為大家介紹了SpringBoot實現(xiàn)定時任務動態(tài)管理示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-06-06