Maven快照

大型應用軟件一般由多個模塊組成,一般它是多個團隊開發同一個應用程序的不同模塊,這是比較常見的場景。例如,一個團隊正在對應用程序的應用程序,用戶界面項目(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 pom.xml

app-ui 項目使用數據服務(data-service)的  1.0-SNAPSHOT


4.0.0
app-ui
app-ui
1.0
jar
health
http://maven.apache.org

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>



data-service
data-service
1.0-SNAPSHOT
test


data-service pom.xml

數據服務(data-service)項目對於每一個微小的變化釋放 1.0 快照:


4.0.0
data-service
data-service
1.0-SNAPSHOT
jar
health
http://maven.apache.org

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

雖然,在使用快照(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] ------------------------------------------------------------------------