maven中snapshot快照庫和release發佈庫的區別和做用

Maven中創建的依賴管理方式基本已成爲Java語言依賴管理的事實標準,Maven的替代者Gradle也基本沿用了Maven的依賴管理機制。在Maven依賴管理中,惟一標識一個依賴項是由該依賴項的三個屬性構成的,分別是groupId、artifactId以及version。這三個屬性能夠惟一肯定一個組件(Jar包或者War包)。緩存

其實在Nexus倉庫中,一個倉庫通常分爲public(Release)倉和SNAPSHOT倉,前者存放正式版本,後者存放快照版本。若是在項目配置文件中(不管是build.gradle仍是pom.xml)指定的版本號帶有’-SNAPSHOT’後綴,好比版本號爲’Junit-4.10-SNAPSHOT’,那麼打出的包就是一個快照版本。ruby

快照版本和正式版本的主要區別在於,本地獲取這些依賴的機制有所不一樣。假設你依賴一個庫的正式版本,構建的時候構建工具會先在本次倉庫中查找是否已經有了這個依賴庫,若是沒有的話纔會去遠程倉庫中去拉取。因此假設你發佈了Junit-4.10.jar到了遠程倉庫,有一個項目依賴了這個庫,它第一次構建的時候會把該庫從遠程倉庫中下載到本地倉庫緩存,之後再次構建都不會去訪問遠程倉庫了。因此若是你修改了代碼,向遠程倉庫中發佈了新的軟件包,但仍然叫Junit-4.10.jar,那麼依賴這個庫的項目就沒法獲得最新更新。你只有在從新發布的時候升級版本,好比叫作Junit-4.11.jar,而後通知依賴該庫的項目組也修改依賴版本爲Junit-4.11,這樣才能使用到你最新添加的功能。工具

這種方式在團隊內部開發的時候會變的特別蛋痛。假設有兩個小組負責維護兩個組件,example-service和example-ui,其中example-ui項目依賴於example-service。而這兩個項目天天都會構建屢次,若是每次構建你都要升級example-service的版本,那麼你會瘋掉。這個時候SNAPSHOT版本就派上用場了。天天平常構建時你能夠構建example-service的快照版本,好比example-service-1.0-SNAPSHOT.jar,而example-ui依賴該快照版本。每次example-ui構建時,會優先去遠程倉庫中查看是否有最新的example-service-1.0-SNAPSHOT.jar,若是有則下載下來使用。即便本地倉庫中已經有了example-service-1.0-SNAPSHOT.jar,它也會嘗試去遠程倉庫中查看同名的jar是不是最新的。有的人可能會問,這樣不就不能充分利用本地倉庫的緩存機制了嗎?彆着急,Maven比咱們想象中的要聰明。在配置Maven的Repository的時候中有個配置項,能夠配置對於SNAPSHOT版本向遠程倉庫中查找的頻率。頻率共有四種,分別是always、daily、interval、never。當本地倉庫中存在須要的依賴項目時,always是每次都去遠程倉庫查看是否有更新,daily是隻在第一次的時候查看是否有更新,當天的其它時候則不會查看;interval容許設置一個分鐘爲單位的間隔時間,在這個間隔時間內只會去遠程倉庫中查找一次,never是不會去遠程倉庫中查找(這種就和正式版本的行爲同樣了)。gradle

Maven版本的配置方式爲:ui

<repository> <id>myRepository</id> <url>...</url> <snapshots> <enabled>true</enabled> <updatePolicy>XXX</updatePolicy> </snapshots> </repository> 

其中updatePolicy就是那4種類型之一。若是配置間隔時間更新,能夠寫做 interval:XX (XX是間隔分鐘數)。daily配置是默認值。url

而在Gradle,能夠設置本地緩存的更新策略。spa

configurations.all {

// check for updates every build resolutionStrategy.cacheChangingModulesFor 0,'seconds' } 

固然也能夠按照分鐘或者小時來設置.code

configurations.all {  resolutionStrategy.cacheChangingModulesFor 10, ‘minutes'  }
configurations.all {  resolutionStrategy.cacheChangingModulesFor 4, ‘hours'  }

因此通常在開發模式下,咱們能夠頻繁的發佈SNAPSHOT版本,以便讓其它項目能實時的使用到最新的功能作聯調;當版本趨於穩定時,再發佈一個正式版本,供正式使用。固然在作正式發佈時,也要確保當前項目的依賴項中不包含對任何SNAPSHOT版本的依賴,保證正式版本的穩定性。regexp

相關文章
相關標籤/搜索