1. 程式人生 > >10 Maven-使用NEXUS建立私服

10 Maven-使用NEXUS建立私服

10.1 簡介

私服:通過建立自己的私服,就可以降低中央倉庫的負荷、節省外網頻寬、加速Maven構建。自己部署構件等,從而高效的使用Maven。

有三種專門的Maven倉庫管理軟體可以用來幫助搭建建立私服,從而高效的使用Maven。
Apache基金會的Archiva、JForg的Artifactory和Sonatype的Nexus。其中,Archiva是開源的,而Artifactory和Nexus的核心也是開源的。


10.2 安裝Nexus

Nexus是典型的Java Web應用,它有兩種安裝包,一種是包含Jetty容器的Bundle包,另一種是不包含Web容器的war包。
10.2.1 下載Nexus

 首先從 http://www.sonatype.org/nexus/downloads/ 下載最新版本的Nexus,可以根據需要下載Bundle包 tar.gz和 zip,或者war包

10.2.2 Bundle方式安裝Nexus
10.2.3 WAR方式安裝Nexus

 除了Bundle,Nexus還提供一個可以直接部署到Web容器的war包。該war包支援主流的Web容器,如Tomcat、Classfish、Jetty、Resin。
直接把war包丟進tomcat的 wabapps下面,然後啟後就可以訪問了。http://localhost:8080/nexus/就能看到Nexus的介面了。

10.2.4 登入Nexus

 Nexus擁有全面的許可權控制功能,預設的Nexus訪問都是匿名的,而匿名使用者僅僅包含了一些最基本的許可權,要全面學習和管理Nexus,就必須以管理員的方式登入,預設的管理員使用者名稱和密碼為 admin/admin123。




10.3 Nexus的倉庫與倉庫組
作為Maven倉庫服務軟體,倉庫自然是Nexus中最重要的概念。Nexus包含了各種型別的倉庫概念,包括代理倉庫、宿主倉庫和倉庫組等。每一種倉庫都提供了豐富使用實用的配置引數,方便使用者根據需要進行定製

10.3.1 Nexus內建的倉庫

如圖,這個列表已經包含了所有型別的Nexus倉庫。從中可以看到倉庫有四種類型:

group(倉庫組)、hosted(宿主)、proxy(代理)和virtual(虛擬)。每個倉庫的格式為maven2或maven1。此外,倉庫還有一個屬性為Policy(策略),表示該倉庫為釋出(Release)版本倉庫還是快照(Snapshot)版本倉庫。最後兩列的值為倉庫的狀態和路勁。
下面介紹一下各個倉庫的用途,這裡不介紹maven1的內容。由於虛列型別倉庫的作用實際上是動態地將倉庫內容格式轉換,換言之也是為了服務maven1格式,因此也被省略。




Maven Central:該倉庫代理Mavne中央倉庫,其策略為Release,因此只會下載和快取中央倉庫中的釋出版本構件。(備註:現在叫 Central)

Releases:這是一個策略為Release的宿主型別倉庫,用來部署組織內部的快照版本構件。

3rd party:這是一個策略為Release的宿主型別倉庫,用來部署無法從公眾倉庫獲得的第三方釋出版本構件。

Apache Snapshots:這是一個策略為Snapshot的代理倉庫,用來代理Apache Maven倉庫的快照版本構件。

Codehaus Snapshots:這是一個策略為Snapshot的代理倉庫,用來代理Codehaus Maven倉庫的快照版本構件。
Google Code:這是一個策略為Snapshot的代理倉庫,用來代理Google Code Maven倉庫的釋出版本構件。

java.net-Maven2:這是一個策略為Snapshot的代理倉庫,用來代理java.net Maven倉庫的釋出版本構件。

Public Repositories:該倉庫組將上述所有策略為Release的倉庫聚合並通過一致的地址提供服務。

Public Snapshot Repositories:該倉庫將上述所有策略為Snapshot的倉庫聚合並通過一致的地址提供服務。


10.3.2 Nexus倉庫分類的概念



如圖,Maven可以直接從宿主倉庫下載構件;Mavne也可以從代理倉庫下載構件,而代理倉庫會間接地從遠端倉庫下載並快取構件;最後為了方便,Maven可以從倉庫組下載構件,而倉庫組沒有實際內容(圖中用淡色表示),它會轉向其他包含的宿主倉庫或者代理倉庫獲得實際構件的內容。


10.3.3 建立Nexus宿主倉庫



10.3.4 建立Nexus代理倉庫


10.3.5 建立Nexus倉庫組





配置中的ID、Name等資訊跟上面一樣,這裡不再贅述。需要注意的是,倉庫組沒有Release和Snapshot的區別,這裡不同於宿主倉庫和代理倉庫。配置介面中,使用者可以非常直觀地選擇Nexus中的倉庫,將其聚合成一個虛擬的倉庫組。注意,倉庫組所包含的倉庫的順序決定了倉庫組遍歷其所含倉庫的次序,因此最好將常用的倉庫放在前面,當用戶從倉庫組下載構件的時候,就能夠儘快訪問到包含構件的倉庫。