欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Maven中的SnapShot版本和正式版本的區(qū)別

 更新時(shí)間:2021年06月25日 10:30:04   作者:黃博文  
在Nexus倉(cāng)庫(kù)中,一個(gè)倉(cāng)庫(kù)一般分為public(Release)倉(cāng)和SNAPSHOT倉(cāng),本文詳細(xì)的介紹了SnapShot版本和正式版本的區(qū)別,感興趣的可以了解一下

Maven中建立的依賴管理方式基本已成為Java語(yǔ)言依賴管理的事實(shí)標(biāo)準(zhǔn),Maven的替代者Gradle也基本沿用了Maven的依賴管理機(jī)制。在Maven依賴管理中,唯一標(biāo)識(shí)一個(gè)依賴項(xiàng)是由該依賴項(xiàng)的三個(gè)屬性構(gòu)成的,分別是groupId、artifactId以及version。這三個(gè)屬性可以唯一確定一個(gè)組件(Jar包或者War包)。

其實(shí)在Nexus倉(cāng)庫(kù)中,一個(gè)倉(cāng)庫(kù)一般分為public(Release)倉(cāng)和SNAPSHOT倉(cāng),前者存放正式版本,后者存放快照版本。如果在項(xiàng)目配置文件中(無(wú)論是build.gradle還是pom.xml)指定的版本號(hào)帶有'-SNAPSHOT'后綴,比如版本號(hào)為'Junit-4.10-SNAPSHOT',那么打出的包就是一個(gè)快照版本。

快照版本和正式版本的主要區(qū)別在于,本地獲取這些依賴的機(jī)制有所不同。假設(shè)你依賴一個(gè)庫(kù)的正式版本,構(gòu)建的時(shí)候構(gòu)建工具會(huì)先在本次倉(cāng)庫(kù)中查找是否已經(jīng)有了這個(gè)依賴庫(kù),如果沒(méi)有的話才會(huì)去遠(yuǎn)程倉(cāng)庫(kù)中去拉取。所以假設(shè)你發(fā)布了Junit-4.10.jar到了遠(yuǎn)程倉(cāng)庫(kù),有一個(gè)項(xiàng)目依賴了這個(gè)庫(kù),它第一次構(gòu)建的時(shí)候會(huì)把該庫(kù)從遠(yuǎn)程倉(cāng)庫(kù)中下載到本地倉(cāng)庫(kù)緩存,以后再次構(gòu)建都不會(huì)去訪問(wèn)遠(yuǎn)程倉(cāng)庫(kù)了。所以如果你修改了代碼,向遠(yuǎn)程倉(cāng)庫(kù)中發(fā)布了新的軟件包,但仍然叫Junit-4.10.jar,那么依賴這個(gè)庫(kù)的項(xiàng)目就無(wú)法得到最新更新。你只有在重新發(fā)布的時(shí)候升級(jí)版本,比如叫做Junit-4.11.jar,然后通知依賴該庫(kù)的項(xiàng)目組也修改依賴版本為Junit-4.11,這樣才能使用到你最新添加的功能。

這種方式在團(tuán)隊(duì)內(nèi)部開發(fā)的時(shí)候會(huì)變的特別蛋痛。假設(shè)有兩個(gè)小組負(fù)責(zé)維護(hù)兩個(gè)組件,example-service和example-ui,其中example-ui項(xiàng)目依賴于example-service。而這兩個(gè)項(xiàng)目每天都會(huì)構(gòu)建多次,如果每次構(gòu)建你都要升級(jí)example-service的版本,那么你會(huì)瘋掉。這個(gè)時(shí)候SNAPSHOT版本就派上用場(chǎng)了。每天日常構(gòu)建時(shí)你可以構(gòu)建example-service的快照版本,比如example-service-1.0-SNAPSHOT.jar,而example-ui依賴該快照版本。每次example-ui構(gòu)建時(shí),會(huì)優(yōu)先去遠(yuǎn)程倉(cāng)庫(kù)中查看是否有最新的example-service-1.0-SNAPSHOT.jar,如果有則下載下來(lái)使用。即使本地倉(cāng)庫(kù)中已經(jīng)有了example-service-1.0-SNAPSHOT.jar,它也會(huì)嘗試去遠(yuǎn)程倉(cāng)庫(kù)中查看同名的jar是否是最新的。有的人可能會(huì)問(wèn),這樣不就不能充分利用本地倉(cāng)庫(kù)的緩存機(jī)制了嗎?別著急,Maven比我們想象中的要聰明。在配置Maven的Repository的時(shí)候中有個(gè)配置項(xiàng),可以配置對(duì)于SNAPSHOT版本向遠(yuǎn)程倉(cāng)庫(kù)中查找的頻率。頻率共有四種,分別是always、daily、interval、never。當(dāng)本地倉(cāng)庫(kù)中存在需要的依賴項(xiàng)目時(shí),always是每次都去遠(yuǎn)程倉(cāng)庫(kù)查看是否有更新,daily是只在第一次的時(shí)候查看是否有更新,當(dāng)天的其它時(shí)候則不會(huì)查看;interval允許設(shè)置一個(gè)分鐘為單位的間隔時(shí)間,在這個(gè)間隔時(shí)間內(nèi)只會(huì)去遠(yuǎn)程倉(cāng)庫(kù)中查找一次,never是不會(huì)去遠(yuǎn)程倉(cāng)庫(kù)中查找(這種就和正式版本的行為一樣了)。

Maven版本的配置方式為:

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

其中updatePolicy就是那4種類型之一。如果配置間隔時(shí)間更新,可以寫作interval:XX(XX是間隔分鐘數(shù))。daily配置是默認(rèn)值。

而在Gradle,可以設(shè)置本地緩存的更新策略。

configurations.all {

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

}

當(dāng)然也可以按照分鐘或者小時(shí)來(lái)設(shè)置.

configurations.all {

resolutionStrategy.cacheChangingModulesFor  10, ‘minutes'

}
 
configurations.all {

resolutionStrategy.cacheChangingModulesFor  4, ‘hours'

}

所以一般在開發(fā)模式下,我們可以頻繁的發(fā)布SNAPSHOT版本,以便讓其它項(xiàng)目能實(shí)時(shí)的使用到最新的功能做聯(lián)調(diào);當(dāng)版本趨于穩(wěn)定時(shí),再發(fā)布一個(gè)正式版本,供正式使用。當(dāng)然在做正式發(fā)布時(shí),也要確保當(dāng)前項(xiàng)目的依賴項(xiàng)中不包含對(duì)任何SNAPSHOT版本的依賴,保證正式版本的穩(wěn)定性。

到此這篇關(guān)于Maven中的SnapShot版本和正式版本的區(qū)別的文章就介紹到這了,更多相關(guān)Maven SnapShot版本和正式版本內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論