[轉(zhuǎn)載聲明] 轉(zhuǎn)載時必須標(biāo)注:本文來源于鐵木箱子的博客http://www.mzone.cc
[原文地址] 原文永久地址是:http://www.mzone.cc/article/279.html
在之前的文章中介紹了maven2中snapshot快照庫和release發(fā)布庫的區(qū)別和作用,我今天這里要介紹的是如何在項目中應(yīng)用snapshot和release庫,應(yīng)用snapshot和release庫達(dá)到不同環(huán)境下發(fā)布不同的版本的目的,首先看一個pom文件的定義:
<PRoject> <modelVersion>4.0.0</modelVersion> <groupId>cc.mzone</groupId> <artifactId>myjar</artifactId> <version>${project.release.version}</version> <packaging>jar</packaging> <distributionManagement> <repository> <id>mzone-release</id> <url>http://192.168.1.88/nexus/content/repositories/mzone-release</url> </repository> <snapshotRepository> <id>mzone-snapshot</id> <url>http://192.168.1.88/nexus/content/repositories/mzone-snapshot</url> </snapshotRepository> </distributionManagement> <properties> <project.release.version>0.1-SNAPSHOT</project.release.version> </properties> <profiles> <profile> <id>product</id> <properties> <project.release.version>0.1</project.release.version> </properties> </profile> </profiles></project>
首先我們看到pom文件中version的定義是采用占位符的形式,這樣的好處是可以根據(jù)不同的profile來替換版本信息,比如maven默認(rèn)是使用0.1-SNAPSHOT作為該模塊的版本。
1、如果在發(fā)布時使用mvn deploy -P product的命令,那么會自動使用0.1作為發(fā)布版本,那么根據(jù)maven處理snapshot和release的規(guī)則,由于版本號后不帶-SNAPSHOT故當(dāng)成是正式發(fā)布版本,會被發(fā)布到release倉庫;
2、如果發(fā)布時使用mvn deploy命令,那么就會使用默認(rèn)的版本號0.1-SNAPSHOT,此時maven會認(rèn)為是快照版本,會自動發(fā)布到快照版本庫。
在distributionManagement段中配置的是snapshot快照庫和release發(fā)布庫的地址,我這里是采用nexus作為鏡像服務(wù)器。對于版本庫主要是id和url的配置,配置完成后就可以通過mvn deploy進(jìn)行發(fā)布了,當(dāng)然了,如果你的鏡像服務(wù)器需要用戶名和密碼,那么還需要在maven的settings.xml文件中做如下配置:
<servers> <server> <id>mzone-release</id> <username>deployment</username> <passWord>deployment</password> </server> <server> <id>mzone-snapshot</id> <username>deployment</username> <password>deployment</password> </server></servers>
注意這里配置的server的id必須和pom文件中的distributionManagement對應(yīng)倉庫的id保持一致,maven在處理發(fā)布時會根據(jù)id查找用戶名稱和密碼進(jìn)行登錄和文件的上傳發(fā)布。
我們這里通過profile的定義就可以在發(fā)布靈活切換snapshot快照版本和release正式版本了,在被依賴的組件中也可以使用profile來定義在開發(fā)階段使用快照庫,在發(fā)布階段使用正式庫的功能,只需要在不同的profile中覆蓋默認(rèn)的properties屬性值即可。
新聞熱點
疑難解答