<!-- xuze added by:添加了一些註釋,利於新人理解 Date:2011年7月18日 --> <settings> <!-- 配置鏡像 --> <mirrors> <mirror> <!-- 此鏡像通常用來做爲公司內部開發的版本快照,做爲public-snapshots倉庫的鏡像地址 --> <!-- 鏡像的id,id用來區分不一樣的mirror元素。 --> <id>nexus-public-snapshots</id> <!-- 被鏡像的服務器的id。例如,若是咱們要設置了一個Maven中央倉庫(http://repo1.maven.org/maven2)的鏡像, 就須要將該元素設置成central。這必須和中央倉庫的id 「central」徹底一致。 --> <mirrorOf>public-snapshots</mirrorOf> <!-- 該鏡像的URL。 --> <url>http://repos.d.xxx.com/nexus/content/groups/public-snapshots</url> </mirror> <mirror> <!-- 此鏡像通常用來做爲公司第三方引用基礎類庫鏡像,是全部倉庫的鏡像地址 --> <id>nexus</id> <!-- 爲*表示爲全部的倉庫作鏡像,有了這個配置,全部的構建都會包含public組,若是你想包含public-snapshots組, 你必須添加public-snapshots這個Profile,經過在命令行使用以下的 -P 標誌:$ mvn -P public-snapshots clean install --> <mirrorOf>*</mirrorOf> <url>http://repos.d.xxx.com/nexus/content/groups/public</url> </mirror> </mirrors> <!-- settings.xml中的profile元素是pom.xml中profile元素的裁剪版本。它包含了activation, repositories, pluginRepositories 和 properties元素。 這裏的profile元素只包含這四個子元素是由於這裏只關心構建系統這個總體(這正是settings.xml文件的角色定位),而非單獨的項目對象模型設置。 若是一個settings中的profile被激活,它的值會覆蓋任何其它定義在POM中或者profile.xml中的帶有相同id的profile。 --> <profiles> <profile> <id>development</id> <!-- 倉庫。倉庫是Maven用來填充構建系統本地倉庫所使用的一組遠程項目。而Maven是從本地倉庫中使用其插件和依賴。 不一樣的遠程倉庫可能含有不一樣的項目,而在某個激活的profile下,可能定義了一些倉庫來搜索須要的發佈版或快照版構件。有了Nexus,這些應該交由Nexus完成 --> <repositories> <repository> <id>central</id> <!-- 虛擬的URL形式,指向鏡像的URL,由於全部的鏡像都是用的是nexus,這裏的central實際上指向的是http://repos.d.xxx.com/nexus/content/groups/public --> <url>http://central</url> <!-- 表示能夠從這個倉庫下載releases版本的構件--> <releases><enabled>true</enabled></releases> <!-- 表示能夠從這個倉庫下載snapshot版本的構件 --> <snapshots><enabled>true</enabled></snapshots> </repository> </repositories> <!-- 插件倉庫。倉庫是兩種主要構件的家。第一種構件被用做其它構件的依賴。這是中央倉庫中存儲大部分構件類型。 另一種構件類型是插件。Maven插件是一種特殊類型的構件。因爲這個緣由,插件倉庫獨立於其它倉庫。 pluginRepositories元素的結構和repositories元素的結構相似。每一個pluginRepository元素指定一個Maven能夠用來尋找新插件的遠程地址。 --> <pluginRepositories> <pluginRepository> <id>central</id> <url>http://central</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </pluginRepository> </pluginRepositories> </profile> <profile> <!--this profile will allow snapshots to be searched when activated--> <id>public-snapshots</id> <repositories> <repository> <id>public-snapshots</id> <!-- 虛擬的URL形式,指向鏡像的URL,這裏指向的是http://repos.d.xxx.com/nexus/content/groups/public-snapshots --> <url>http://public-snapshots</url> <releases><enabled>false</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>public-snapshots</id> <url>http://public-snapshots</url> <releases><enabled>false</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </pluginRepository> </pluginRepositories> </profile> </profiles> <!-- 激活的Profile。activation元素並非激活profile的惟一方式。settings.xml文件中的activeProfile元素能夠包含profile的id, 任何在activeProfile中定義的profile id,不論環境設置如何,其對應的profile都會被激活。若是沒有匹配的profile,則什麼都不會發生。 profile也能夠經過在命令行,使用-P標記和逗號分隔的列表來顯式的激活(如,-P test)。 要了解在某個特定的構建中哪些profile會激活,可使用maven-help-plugin(mvn help:active-profiles)。 --> <activeProfiles> <!-- 沒有顯示激活public-snapshots --> <activeProfile>development</activeProfile> </activeProfiles> <!-- 自定義本地倉庫地址,其默認值爲~/.m2/repository --> <localRepository>/data/maven-repository</localRepository> <!-- 發佈的服務器和密碼,暫時未限制權限 --> <servers> <server> <!-- 發佈的位置在POM中配置,以ID爲關聯,有不少公用的信息須要配置在POM文件裏,最佳實踐是定義一個公司級別的root pom --> <id>archiva.internal</id> <username>maven</username> <password>1q2w3e4r</password> </server> <server> <id>archiva.snapshots</id> <username>maven</username> <password>1q2w3e4r</password> </server> </servers> </settings>
分發構件至遠程倉庫java
mvn install 會將項目生成的構件安裝到本地Maven倉庫,mvn deploy 用來將項目生成的構件分發到遠程Maven倉庫。本地Maven倉庫的構件只能供當前用戶使用,在分發到遠程Maven倉庫以後,全部能訪問該倉庫的用戶都能使用你的構件。服務器
咱們須要配置POM的distributionManagement來指定Maven分發構件的位置,以下:maven
<project> ... <distributionManagement> <repository> <id>nexus-releases</id> <name>Nexus Release Repository</name> <url>http://127.0.0.1:8080/nexus/content/repositories/releases/</url> </repository> <snapshotRepository> <id>nexus-snapshots</id> <name>Nexus Snapshot Repository</name> <url>http://127.0.0.1:8080/nexus/content/repositories/snapshots/</url> </snapshotRepository> </distributionManagement> ... </project>
Maven區別對待release版本的構件和snapshot版本的構件,snapshot爲開發過程當中的版本,實時,但不穩定,release版本則比較穩定。Maven會根據你項目的版原本判斷將構件分發到哪一個倉庫。this
通常來講,分發構件到遠程倉庫須要認證,若是你沒有配置任何認證信息,你每每會獲得401錯誤。這個時候,以下在settings.xml中配置認證信息:url
Xml代碼
插件
<settings> ... <servers> <server> <id>nexus-releases</id> <username>admin</username> <password>admin123</password> </server> <server> <id>nexus-snapshots</id> <username>admin</username> <password>admin123</password> </server> </servers> ... </settings>
需 要注意的是,settings.xml中server元素下id的值必須與POM中repository或snapshotRepository下id的 值徹底一致。將認證信息放到settings下而非POM中,是由於POM每每是它人可見的,而settings.xml是本地的。命令行