大型應用軟體一般由多個模組組成,一般它是多個團隊開發同一個應用程式的不同模組,這是比較常見的場景。例如,一個團隊正在對應用程式的應用程式,使用者介面專案(app-ui.jar:1.0) 的前端進行開發,他們使用的是資料服務工程 (data-service.jar:1.0)。
現在,它可能會有這樣的情況發生,工作在資料服務團隊開發人員快速地開發 bug 修復或增強功能,他們幾乎每隔一天就要釋放出庫到遠端倉庫。
現在,如果資料服務團隊上傳新版本後,會出現下面的問題:
資料服務團隊應該發布更新時每次都告訴應用程式UI團隊,他們已經發布更新了程式碼。
UI團隊需要經常更新自己 pom.xml 以獲得更新應用程式的版本。
為了處理這類情況,引入快照的概念,並行揮作用。
快照(SNAPSHOT )是一個特殊版本,指出目前開發拷貝。不同於常規版本,Maven 每生成一個遠端儲存庫都會檢查新的快照版本。
現在,資料服務團隊將在每次發布程式碼後更新快照儲存庫為:data-service:1.0-SNAPSHOT 替換舊的 SNAPSHOT jar。
在使用版本時,如果 Maven 下載所提到的版本為 data-service:1.0,那麼它永遠不會嘗試在庫中下載已經更新的版本1.0。要下載更新的程式碼,data-service的版本必須要升級到1.1。
在使用快照(SNAPSHOT)時,Maven會在每次應用程式UI團隊建立自己的專案時自動獲取最新的快照(data-service:1.0-SNAPSHOT)。
app-ui 專案使用資料服務(data-service)的 1.0-SNAPSHOT
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>app-ui</groupId>
<artifactId>app-ui</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<name>health</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>data-service</groupId>
<artifactId>data-service</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
資料服務(data-service)專案對於每一個微小的變化釋放 1.0 快照:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>data-service</groupId> <artifactId>data-service</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <name>health</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> </project>
雖然,在使用快照(SNAPSHOT)時,Maven 自動獲取最新的快照版本。不過我們也可以強制使用 -U 切換到任何 maven 命令來下載最新的快照版本。
mvn clean package -U
開啟命令控制台,進入到 C: \MVN\app-ui 目錄,然後執行以下命令mvn命令。
C:\MVN\app-ui>mvn clean package -U
Maven會下載資料服務的最新快照後並開始構建該專案,如下所輸出:
[INFO] Scanning for projects... [INFO] ------------------------------------------------------------------- [INFO] Building consumerBanking [INFO] task-segment: [clean, package] [INFO] ------------------------------------------------------------------- [INFO] Downloading data-service:1.0-SNAPSHOT [INFO] 290K downloaded. [INFO] [clean:clean {execution: default-clean}] [INFO] Deleting directory C:MVNapp-ui arget [INFO] [resources:resources {execution: default-resources}] [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory C:MVNapp-uisrcmain resources [INFO] [compiler:compile {execution: default-compile}] [INFO] Compiling 1 source file to C:MVNapp-ui argetclasses [INFO] [resources:testResources {execution: default-testResources}] [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory C:MVNapp-uisrc est resources [INFO] [compiler:testCompile {execution: default-testCompile}] [INFO] Compiling 1 source file to C:MVNapp-ui arget est-classes [INFO] [surefire:test {execution: default-test}] [INFO] Surefire report directory: C:MVNapp-ui arget surefire-reports ------------------------------------------------------- T E S T S ------------------------------------------------------- Running com.companyname.bank.AppTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.027 sec Results : Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [INFO] [jar:jar {execution: default-jar}] [INFO] Building jar: C:MVNapp-ui arget app-ui-1.0-SNAPSHOT.jar [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2 seconds [INFO] Finished at: Tue Jul 10 16:52:18 IST 2015 [INFO] Final Memory: 16M/89M [INFO] ------------------------------------------------------------------------