|
我們知道,Maven項目第一構建時,會自動從遠程倉庫搜索依賴項,并將其下載到本地倉庫中。當項目再進行構建時,會直接從本地倉庫搜索依賴項并引用,而不會再次向遠程倉庫獲取。這樣的設計能夠避免項目每次構建時都去遠程倉庫下載依賴,減輕了網絡帶寬的壓力,但也帶來了問題。 大型的應用軟件通常由多個功能模塊組成,這些模塊一般分別于不同的團隊負責開發(fā)。假設有兩個團隊,他們分別負責項目中的app-ui(前端)和data-service(數(shù)據(jù)服務)兩個模塊,且app-ui需要依賴data-service項目作為數(shù)據(jù)服務來源。 基于以上假設,若data-service團隊正在進行快節(jié)奏的bug修復及功能增強,會在短時間內高頻率地更新代碼以及發(fā)布版本。就會出現(xiàn)以下情況: 1、data-service團隊每次發(fā)布新版本更新代碼時,都應該通知app-ui團隊。 2、app-ui團隊則需要定期更新其pom.xml以獲得最新的版本。 這樣,勢必會影響開發(fā)效率,甚至會影響項目的驗收及投產。要解決這個問題,其實很簡單,那就是使用SNAPSHOT(快照)版本。 SNAPSHOT是什么SNAPSHOT(快照)是一種特殊的版本,它表示當前開發(fā)進度的副本。與常規(guī)版本不同,快照版本的構件在發(fā)布時,Maven會自動為它打上一個時間戳,有了這個時間戳后,當依賴該構件的項目進行構建時,Maven就能從倉庫中找到最新的SNAPSHOT版本文件。 定義一個組件或模塊為快照版本,只需要在其pom.xml中版本號(version元素的值)后加上-SNAPSHOT即可,例如: <groupId>net.biancheng.www</groupId> <artifactId>helloMaven</artifactId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version>1234復制代碼類型:[java] 要解決上面的問題,現(xiàn)在就十分簡單了:data-servcie團隊每次更新代碼都使用快照版本發(fā)布到倉庫中,app-ui團隊則引用快照版本的依賴,這樣app-ui不再需要重復修改pom.xml中的配置,每次構建時都會自動從倉庫中獲取最新的構件。 默認情況下對于快照本本的構件,Maven會每天從倉庫中獲取一次更新,用戶也可以在任何Maven命令中使用-U參數(shù)強制Maven檢查更新。命令如下: mvn clean package -U1復制代碼類型:[java] SNAPSHOT版本VSRELEASE版本Maven倉庫分為兩種,Snapshot快照倉庫和Release發(fā)行倉庫。Snapshot快照倉庫用于保存開發(fā)過程中的不穩(wěn)定SNAPSHOT版本,Release發(fā)行倉庫則用來保存穩(wěn)定的RELEASE版本。 Maven會根據(jù)模塊的版本號(pom.xml文件中的version元素)中是否帶有-SNAPSHOT來判斷是SNAPSHOT版本還是正式RELEASE版本。帶有-SNAPSHOT是SNAPSHOT(快照)版本,不帶-SNAPSHOT的就是正式RELEASE(發(fā)布)版本。 SNAPSHOT版本和RELEASE版本區(qū)別如下表。
示例打開命令行窗口,跳轉到D:\maven\secondMaven目錄,執(zhí)行以下mvn命令。 mvn clean package -U1復制代碼類型:[java] 命令執(zhí)行結果如下。 [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] ------------------------------------------------------------------------ |
|
|