Nexus 作為一款 Maven 倉(cāng)庫(kù)管理器,倉(cāng)庫(kù)(Repository)自然是 Nexus 最核心的概念。Nexus 中提供了許多倉(cāng)庫(kù)概念,如代理倉(cāng)庫(kù)、宿主倉(cāng)庫(kù)以及倉(cāng)庫(kù)組等。Nexus 為每一種倉(cāng)庫(kù)都提供了豐富的配置參數(shù),方便我們根據(jù)自身需要進(jìn)行定制。
點(diǎn)擊左邊導(dǎo)航欄中的 Repositories,可以看到 Nexus 自帶的幾個(gè)內(nèi)置倉(cāng)庫(kù),如下圖所示。
在倉(cāng)庫(kù)列表中,每個(gè)倉(cāng)庫(kù)都具有一系列屬性:
Type:倉(cāng)庫(kù)的類型,Nexus 中有 4 中倉(cāng)庫(kù)類型:group(倉(cāng)庫(kù)組)、hosted(宿主倉(cāng)庫(kù))、proxy(代理倉(cāng)庫(kù))以及 virtual(虛擬倉(cāng)庫(kù))。
Format:倉(cāng)庫(kù)的格式。
Policy:倉(cāng)庫(kù)的策略,表示該倉(cāng)庫(kù)是發(fā)布(Release)版本倉(cāng)庫(kù)還是快照(Snapshot)版本倉(cāng)庫(kù)。
Repository Status:倉(cāng)庫(kù)的狀態(tài)。
Repository Path:倉(cāng)庫(kù)的路徑。
由圖 1 可知,Nexus 2.x 默認(rèn)創(chuàng)建了 6 個(gè)倉(cāng)庫(kù),我們稱它們?yōu)?Nexus 內(nèi)置倉(cāng)庫(kù)。
Maven Central:該倉(cāng)庫(kù)用來(lái)代理 Maven 中央倉(cāng)庫(kù),其策略為 Release,只會(huì)下載和緩存中央倉(cāng)庫(kù)中的發(fā)布版本的構(gòu)件。
Releases:策略為 Release 的宿主倉(cāng)庫(kù),用來(lái)部署公司或組織內(nèi)部的發(fā)布版本構(gòu)件。
Snapshots:策略為 Snapshot 的宿主倉(cāng)庫(kù),用來(lái)部署公司或組織內(nèi)部的快照版本構(gòu)件。
3rd party:策略為 Release 的宿主倉(cāng)庫(kù),用來(lái)部署第三方發(fā)布版本構(gòu)件,這些構(gòu)件一般無(wú)法從任何遠(yuǎn)程倉(cāng)庫(kù)中獲得。
Public Repositories:該倉(cāng)庫(kù)組將上述所有存儲(chǔ)策略為 Release 的倉(cāng)庫(kù)聚合并通過統(tǒng)一的地址提供服務(wù)。
Nexus 倉(cāng)庫(kù)按照類型(Type)區(qū)分,主要分為以下 3 個(gè)類型:
代理倉(cāng)庫(kù)(proxy):用來(lái)代理遠(yuǎn)程公共倉(cāng)庫(kù),如 Maven 中央倉(cāng)庫(kù)、JBoss 遠(yuǎn)程倉(cāng)庫(kù)。
宿主倉(cāng)庫(kù)(hosted):又稱 Nexus 本地倉(cāng)庫(kù),該倉(cāng)庫(kù)通常用來(lái)部署本地項(xiàng)目所產(chǎn)生的構(gòu)件。
倉(cāng)庫(kù)組(group):用來(lái)聚合代理倉(cāng)庫(kù)和宿主倉(cāng)庫(kù),為這些倉(cāng)庫(kù)提供統(tǒng)一的服務(wù)地址,以便 Maven 可以更加方便地獲得這些倉(cāng)庫(kù)中的構(gòu)件。
為了更加直觀的理解倉(cāng)庫(kù)組、代理倉(cāng)庫(kù)和宿主倉(cāng)庫(kù)的概念,我們通過下圖展示它們的用途和區(qū)別。
由上圖可知:
Maven 可以直接從宿主倉(cāng)庫(kù)中下載構(gòu)件。
Maven 也可以從代理倉(cāng)庫(kù)中下載構(gòu)件,代理倉(cāng)庫(kù)會(huì)從遠(yuǎn)程倉(cāng)庫(kù)下載并緩存構(gòu)件。
Maven 還可以從倉(cāng)庫(kù)組中下載構(gòu)件,倉(cāng)庫(kù)組會(huì)從其包含的宿主倉(cāng)庫(kù)和代理倉(cāng)庫(kù)中獲取構(gòu)件。