1. 程式人生 > >Maven 學習筆記二十一:Maven倉庫(快照版本)

Maven 學習筆記二十一:Maven倉庫(快照版本)



Maven倉庫(快照版本)

----------

在Maven的世界中,任何一個專案或者構件都必須有自己的版本。版本的值可能是1.0.0,1.3-alpha-4,2.0,2.1-SNAPSHOT或者2.1-20091214.221414-13。其中,1.0、1.3-alpha-4和2.0是穩定的釋出版本,而2.1-SNAPSHOT和2.1-20091214.221414-13是不穩定的快照版本。

Maven為什麼要區分發布版本和快照版本呢?簡單的1.0.0、1.2、2.1等不就夠了嗎?為什麼還要2.1-SNAPSHOT,甚至是長長的2.1-20091214.221414-13?試想一下這樣的情況,小張在開發模組A的2.1版本,該版本還未正式釋出,與模組A一同開發的還有模組B,它由小張的同事季MM開發,B的功能依賴於A。在開發的過程中,小張需要經常將自己最新的構建輸出,交給季MM,供她開發和整合除錯,問題是,這個工作如何進行呢?

如果不停更新版本2.1.1、2.1.2、2.1.3....呢?首先,小張和季MM兩人都需要頻繁地更改POM,如果有更多的模組依賴於模組A,就會涉及更多的POM更改;其次,大量的版本其實僅僅包含了微小的差異,這樣也會造成為版本號的濫用。

Maven的快照版本機制就是為了解決上述問題。在該例中,小張只需要將模組A的版本設定為2.1-SNAPSHOT,然後釋出到私服中,在釋出的過程中,Maven會自動為構件打上時間戳。比如:2.1-20091214.221414-13就表示2009年12月14日 22點14分14秒的第13次快照。有了該時間戳,Maven就能隨時找到倉庫中該構件2.1-SNAPSHOT版本最新的檔案。這時,季MM配置對於模組A的2.1-SNAPSHOT版本的依賴,當她構件模組B的時候,Maven會自動從倉庫中檢查模組A的2.1-SNAPSHOT的最新構件,當發現有更新時便進行下載

。預設情況下,Maven每天檢查一次更新(由倉庫配置的updatePolicy控制),使用者也可以使用命令列-U引數強制讓Maven檢查更新,如:mvn clean install-U

基於快照版本機制,小張在構建成功之後才能將構件部署至倉庫,而季MM可以完全不用考慮模組A的構建,並且她能確保隨時得到模組A的最新可用的快照構件,而這一切都不需要額外的手工操作。