我們知道,Maven項(xiàng)目第一構(gòu)建時(shí),會(huì)自動(dòng)從遠(yuǎn)程倉庫搜索依賴項(xiàng),并將其下載到本地倉庫中。當(dāng)項(xiàng)目再進(jìn)行構(gòu)建時(shí),會(huì)直接從本地倉庫搜索依賴項(xiàng)并引用,而不會(huì)再次向遠(yuǎn)程倉庫獲取。這樣的設(shè)計(jì)能夠避免項(xiàng)目每次構(gòu)建時(shí)都去遠(yuǎn)程倉庫下載依賴,減輕了網(wǎng)絡(luò)帶寬的壓力,但也帶來了問題。 大型的應(yīng)用軟件通常由多個(gè)功能模塊組成,這些模塊一般分別于不同的團(tuán)隊(duì)負(fù)責(zé)開發(fā)。假設(shè)有兩個(gè)團(tuán)隊(duì),他們分別負(fù)責(zé)項(xiàng)目中的app-ui(前端)和data-service(數(shù)據(jù)服務(wù))兩個(gè)模塊,且app-ui需要依賴data-service項(xiàng)目作為數(shù)據(jù)服務(wù)來源。 基于以上假設(shè),若data-service團(tuán)隊(duì)正在進(jìn)行快節(jié)奏的bug修復(fù)及功能增強(qiáng),會(huì)在短時(shí)間內(nèi)高頻率地更新代碼以及發(fā)布版本。就會(huì)出現(xiàn)以下情況: 1、data-service團(tuán)隊(duì)每次發(fā)布新版本更新代碼時(shí),都應(yīng)該通知app-ui團(tuán)隊(duì)。 2、app-ui團(tuán)隊(duì)則需要定期更新其pom.xml以獲得最新的版本。 這樣,勢(shì)必會(huì)影響開發(fā)效率,甚至?xí)绊戫?xiàng)目的驗(yàn)收及投產(chǎn)。要解決這個(gè)問題,其實(shí)很簡(jiǎn)單,那就是使用SNAPSHOT(快照)版本。 SNAPSHOT是什么SNAPSHOT(快照)是一種特殊的版本,它表示當(dāng)前開發(fā)進(jìn)度的副本。與常規(guī)版本不同,快照版本的構(gòu)件在發(fā)布時(shí),Maven會(huì)自動(dòng)為它打上一個(gè)時(shí)間戳,有了這個(gè)時(shí)間戳后,當(dāng)依賴該構(gòu)件的項(xiàng)目進(jìn)行構(gòu)建時(shí),Maven就能從倉庫中找到最新的SNAPSHOT版本文件。 定義一個(gè)組件或模塊為快照版本,只需要在其pom.xml中版本號(hào)(version元素的值)后加上-SNAPSHOT即可,例如: <groupId>net.biancheng.www</groupId> <artifactId>helloMaven</artifactId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version>1234復(fù)制代碼類型:[java] 要解決上面的問題,現(xiàn)在就十分簡(jiǎn)單了:data-servcie團(tuán)隊(duì)每次更新代碼都使用快照版本發(fā)布到倉庫中,app-ui團(tuán)隊(duì)則引用快照版本的依賴,這樣app-ui不再需要重復(fù)修改pom.xml中的配置,每次構(gòu)建時(shí)都會(huì)自動(dòng)從倉庫中獲取最新的構(gòu)件。 默認(rèn)情況下對(duì)于快照本本的構(gòu)件,Maven會(huì)每天從倉庫中獲取一次更新,用戶也可以在任何Maven命令中使用-U參數(shù)強(qiáng)制Maven檢查更新。命令如下: mvn clean package -U1復(fù)制代碼類型:[java] SNAPSHOT版本VSRELEASE版本Maven倉庫分為兩種,Snapshot快照倉庫和Release發(fā)行倉庫。Snapshot快照倉庫用于保存開發(fā)過程中的不穩(wěn)定SNAPSHOT版本,Release發(fā)行倉庫則用來保存穩(wěn)定的RELEASE版本。 Maven會(huì)根據(jù)模塊的版本號(hào)(pom.xml文件中的version元素)中是否帶有-SNAPSHOT來判斷是SNAPSHOT版本還是正式RELEASE版本。帶有-SNAPSHOT是SNAPSHOT(快照)版本,不帶-SNAPSHOT的就是正式RELEASE(發(fā)布)版本。 SNAPSHOT版本和RELEASE版本區(qū)別如下表。
示例打開命令行窗口,跳轉(zhuǎn)到D:\maven\secondMaven目錄,執(zhí)行以下mvn命令。 mvn clean package -U1復(fù)制代碼類型:[java] 命令執(zhí)行結(jié)果如下。 [INFO] Scanning for projects... [WARNING] [WARNING] Some problems were encountered while building the effective model for net.biancheng.www:secondMaven:jar:1.0-SNAPSHOT [WARNING] 'dependencies.dependency.systemPath' for net.biancheng.www:helloMaven:jar should use a variable instead of a hard-coded path D:\maven\helloMaven\target\helloMaven-1.0-SNAPSHOT.jar @ line 37, column 16[WARNING] [WARNING] It is highly recommended to fix these problems because they threaten the stability of your build. [WARNING] [WARNING] For this reason, future Maven versions might no longer support building such malformed projects. [WARNING] [INFO] [INFO] -------------------< net.biancheng.www:secondMaven >-------------------- [INFO] Building secondMaven 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ secondMaven --- [INFO] Deleting D:\maven\secondMaven\target [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ secondMaven --- [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory D:\maven\secondMaven\src\main\resources [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ secondMaven --- [INFO] Changes detected - recompiling the module! [WARNING] File encoding has not been set, using platform encoding GBK, i.e. build is platform dependent! [INFO] Compiling 1 source file to D:\maven\secondMaven\target\classes [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ secondMaven --- [WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory D:\maven\secondMaven\src\test\resources [INFO] [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ secondMaven --- [INFO] Changes detected - recompiling the module! [WARNING] File encoding has not been set, using platform encoding GBK, i.e. build is platform dependent! [INFO] Compiling 1 source file to D:\maven\secondMaven\target\test-classes [INFO] [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ secondMaven --- [INFO] Surefire report directory: D:\maven\secondMaven\target\surefire-reports ------------------------------------------------------- T E S T S ------------------------------------------------------- Running net.biancheng.www.AppTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.008 sec Results : Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [INFO] [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ secondMaven --- [INFO] Building jar: D:\maven\secondMaven\target\secondMaven-1.0-SNAPSHOT.jar [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2.413 s [INFO] Finished at: 2021-03-04T10:24:32+08:00 [INFO] ------------------------------------------------------------------------ |
|