在使用maven過程當中,咱們在開發階段常常性的會有不少公共庫處於不穩定狀態,隨時須要修改併發布,可能一天就要發佈一次,遇到bug時,甚至一天要發佈N次。咱們知道,maven的依賴管理是基於版本管理的,對於發佈狀態的artifact,若是版本號相同,即便咱們內部的鏡像服務器上的組件比本地新,maven也不會主動下載的。若是咱們在開發階段都是基於正式發佈版原本作依賴管理,那麼遇到這個問題,就須要升級組件的版本號,可這樣就明顯不符合要求和實際狀況了。可是,若是是基於快照版本,那麼問題就自熱而然的解決了,而maven已經爲咱們準備好了這一切。apache
maven中的倉庫分爲兩種,snapshot快照倉庫和release發佈倉庫。snapshot快照倉庫用於保存開發過程當中的不穩定版本,release正式倉庫則是用來保存穩定的發行版本。定義一個組件/模塊爲快照版本,只須要在pom文件中在該模塊的版本號後加上-SNAPSHOT便可(注意這裏必須是大寫),以下:服務器
<groupId>cc.mzone</groupId> <artifactId>m1</artifactId> <version>0.1-SNAPSHOT</version> <packaging>jar</packaging>
maven會根據模塊的版本號(pom文件中的version)中是否帶有-SNAPSHOT來判斷是快照版本仍是正式版本。若是是快照版本,那麼在mvn deploy時會自動發佈到快照版本庫中,而使用快照版本的模塊,在不更改版本號的狀況下,直接編譯打包時,maven會自動從鏡像服務器上下載最新的快照版本。若是是正式發佈版本,那麼在mvn deploy時會自動發佈到正式版本庫中,而使用正式版本的模塊,在不更改版本號的狀況下,編譯打包時若是本地已經存在該版本的模塊則不會主動去鏡像服務器上下載。mybatis
因此,咱們在開發階段,能夠將公用庫的版本設置爲快照版本,而被依賴組件則引用快照版本進行開發,在公用庫的快照版本更新後,咱們也不須要修改pom文件提示版本號來下載新的版本,直接mvn執行相關編譯、打包命令便可從新下載最新的快照庫了,從而也方便了咱們進行開發。併發
接下來要介紹的是如何在項目中應用snapshot和release庫,應用snapshot和release庫達到不一樣環境下發布不一樣的版本的目的,首先看一個pom文件的定義:maven
<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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>net.aty.mybatis</groupId> <artifactId>mybatis-demo</artifactId> <packaging>jar</packaging> <version>${project.release.version}</version> <name>mybatis-demo</name> <url>http://maven.apache.org</url> <properties> <project.release.version>0.1-SNAPSHOT</project.release.version> </properties> <profiles> <profile> <id>release</id> <properties> <project.release.version>0.1</project.release.version> </properties> </profile> </profiles> <!--定義snapshots庫和releases庫的nexus地址--> <distributionManagement> <repository> <id>nexus-releases</id> <url> http://172.17.103.59:8081/nexus/content/repositories/releases/ </url> </repository> <snapshotRepository> <id>nexus-snapshots</id> <url> http://172.17.103.59:8081/nexus/content/repositories/snapshots/ </url> </snapshotRepository> </distributionManagement> </project>
首先咱們看到pom文件中version的定義是採用佔位符的形式,這樣的好處是能夠根據不一樣的profile來替換版本信息,好比maven默認是使用0.1-SNAPSHOT做爲該模塊的版本。url
一、若是在發佈時使用mvn deploy -P release 的命令,那麼會自動使用0.1做爲發佈版本,那麼根據maven處理snapshot和release的規則,因爲版本號後不帶-SNAPSHOT故當成是正式發佈版本,會被髮布到release倉庫;
二、若是發佈時使用mvn deploy命令,那麼就會使用默認的版本號0.1-SNAPSHOT,此時maven會認爲是快照版本,會自動發佈到快照版本庫。spa
在distributionManagement段中配置的是snapshot快照庫和release發佈庫的地址,我這裏是採用nexus做爲鏡像服務器。對於版本庫主要是id和url的配置,配置完成後就能夠經過mvn deploy進行發佈了,固然了,若是你的鏡像服務器須要用戶名和密碼,那麼還須要在maven的settings.xml文件中作以下配置:.net
<server> <id>nexus-releases</id> <username>admin</username> <password>admin123</password> </server> <server> <id>nexus-snapshots</id> <username>admin</username> <password>admin123</password> </server>
注意這裏配置的server的id必須和pom文件中的distributionManagement對應倉庫的id保持一致,maven在處理髮布時會根據id查找用戶名稱和密碼進行登陸和文件的上傳發布。
咱們這裏經過profile的定義就能夠在發佈靈活切換snapshot快照版本和release正式版本了,在被依賴的組件中也可使用profile來定義在開發階段使用快照庫,在發佈階段使用正式庫的功能,只須要在不一樣的profile中覆蓋默認的properties屬性值便可。code
出處:http://blog.csdn.net/aitangyong/article/details/53332091server