Nexus是什么
Nexus 讀音:/?neks?s/是 Sonatype 公司發(fā)布的一款倉庫(Repository)管理軟件,常用來搭建 Maven 私服,所以也有人將 Nexus 稱為“Maven倉庫管理器”。
Maven 私服其實(shí)并不是 Maven 的核心概念,它僅僅是一種衍生出來的特殊的倉庫,但這并不代表它不重要,相反由于私服具有降低中央倉庫負(fù)荷、節(jié)省外網(wǎng)帶寬、以及提高項(xiàng)目穩(wěn)定性等優(yōu)點(diǎn),使得私服在實(shí)際開發(fā)過程中得到了相當(dāng)普遍地使用。
能夠幫助我們建立私服的軟件被稱為 Maven 倉庫管理器,主要有以下 3 種:
- Apache Archiva
- JFrog Artifactory
- Sonatype Nexus
其中,Sonatype Nexus 是當(dāng)前最流行,使用最廣泛的 Maven 倉庫管理器。Nexus 分為開源版和專業(yè)版,其中開源版足以滿足大部分 Maven 用戶的需求。
Nexus 開源版具有以下特性:
- 占用內(nèi)存小(28 M 左右)
- 具有基于 ExtJs 得操作界面,用戶體驗(yàn)較好
- 使用基于 Restlet 的完全 REST API
- 支持代理倉庫、宿主倉庫和倉庫組
- 基于文件系統(tǒng),不需要依賴數(shù)據(jù)庫
- 支持倉庫索引以及搜索
- 支持在界面上上傳構(gòu)件
- 安全控制
Nexus 專業(yè)版需要付費(fèi)購買,它主要包含一些企業(yè)級的高級特性,詳情請參考 Sonatype Nexus 官方文檔。
Nexus下載和安裝
目前 Nexus 分為 Nexus 2.x 和 Nexus 3.x 兩個(gè)大版本,它們是并行的關(guān)系,目前使用最多,運(yùn)行最穩(wěn)定的是 Nexus 2.x,下面我們以 Nexus 2.x 為例,演示 Nexus 的安裝過程。
1. 進(jìn)入 Nexus 2.x 下載頁面,根據(jù)本機(jī)操作系統(tǒng),選擇對應(yīng)的版本進(jìn)行下載,如下圖所示。
圖1:Nexus 2.x 下載頁面
2. 將下載 Nexus 安裝包解壓到本地磁盤,可獲得 nexus-2.14.20-02 和 sonatype-work 2 個(gè)目錄,如下圖。
圖2:Nexus 2.x 目錄
其中:
- nexus-2.14.20-02:該目錄中包含了 Nexus 2.x 運(yùn)行所需要的文件,如啟動腳本、依賴 jar 包等。
- sonatype-work:該目錄中包含了 Nexus 2.x 生成的配置文件、日志文件等。
3. nexus-2.14.20-02 中包含以下目錄及文件。
圖3:nexus-2.14.20-02 目錄及文件列表
nexus-2.14.20-02 目錄說明,如下表所示。
子目錄 | 說明 |
---|---|
bin | 命令中心(啟動命令,關(guān)閉命令) |
conf | 配置中心(管理著倉庫列表、日志配置,以及安全設(shè)置) |
lib | Nexus 的庫文件,Nexus 運(yùn)行時(shí)需要的 jar 包所在的目錄 |
logs | 存放日志文件 |
nexus | Nexus 應(yīng)用程序 |
tmp | 存放Nexus 運(yùn)行時(shí)產(chǎn)生的臨時(shí)文件 |
4. .進(jìn)入 \nexus-2.14.20-02\bin\jsw 文件夾,根須操作系統(tǒng)版本選擇合適的目錄,由于我的操作系統(tǒng)是 Windows 10 64 位,所以我選擇 windows-x86-64 目錄,如下圖所示。
圖4:nexus-2.14.20-02\bin\jsw 目錄列表
5. 進(jìn)入 windows-x86-64 目錄后可以看到如下文件。
圖5:Nexus 啟動文件列表
其中:
- console-nexus.bat:啟動 Nexus 并在 DOS 命令行中展示啟動過程。
- install-nexus.bat:將 Nexus 安裝為 Windows 服務(wù),開機(jī)自動啟動。
- start-nexus.bat:啟動 Nexus。
- stops-nexus.bat:停止 Nexus。
- uninstall-nexus.bat:與 install-nexus.bat 相對應(yīng),負(fù)責(zé)卸載 Nexus 服務(wù)。
6. 雙擊運(yùn)行 install-nexus.bat 安裝 Nexus 服務(wù),然后運(yùn)行 start-nexus.bat 啟動服務(wù)。
注意:
- 運(yùn)行 install-nexus.bat 安裝服務(wù),若提示”wrapper | OpenSCManager failed - 拒絕訪問。 (0x5)“,只要關(guān)閉窗口,以管理員身份運(yùn)行即可解決。
- 運(yùn)行 start-nexus.bat 啟動服務(wù),若提示”wrapper | OpenSCManager failed - 拒絕訪問。 (0x5)“,只要關(guān)閉窗口,以管理員身份運(yùn)行即可解決。
7. 訪問 http://localhost:8081/nexus,結(jié)果如下圖,則表示服務(wù)啟動成功,否則表示服務(wù)啟動失敗。
圖6:Nexus 首頁
8. 點(diǎn)擊首頁右上角的“Log In”按鈕,在登錄頁面輸入用戶名和密碼(默認(rèn)分別為:admin 和 admin123 ),最后點(diǎn)擊“Log In”按鈕登錄。
圖7:Nexus 登錄界面
9. 登錄成功后,結(jié)果如下圖。
圖8:Nexus 登錄成功
Nexus倉庫屬性和分類
Nexus 作為一款 Maven 倉庫管理器,倉庫(Repository)自然是 Nexus 最核心的概念。Nexus 中提供了許多倉庫概念,如代理倉庫、宿主倉庫以及倉庫組等。Nexus 為每一種倉庫都提供了豐富的配置參數(shù),方便我們根據(jù)自身需要進(jìn)行定制。
Nexus 倉庫屬性
點(diǎn)擊左邊導(dǎo)航欄中的 Repositories,可以看到 Nexus 自帶的幾個(gè)內(nèi)置倉庫,如下圖所示。
圖1:Nexus 內(nèi)置倉庫列表(猛擊圖片可以查看原圖)
在倉庫列表中,每個(gè)倉庫都具有一系列屬性:
- Type:倉庫的類型,Nexus 中有 4 中倉庫類型:group(倉庫組)、hosted(宿主倉庫)、proxy(代理倉庫)以及 virtual(虛擬倉庫)。
- Format:倉庫的格式。
- Policy:倉庫的策略,表示該倉庫是發(fā)布(Release)版本倉庫還是快照(Snapshot)版本倉庫。
- Repository Status:倉庫的狀態(tài)。
- Repository Path:倉庫的路徑。
由圖 1 可知,Nexus 2.x 默認(rèn)創(chuàng)建了 6 個(gè)倉庫,我們稱它們?yōu)?Nexus 內(nèi)置倉庫。
- Maven Central:該倉庫用來代理 Maven 中央倉庫,其策略為 Release,只會下載和緩存中央倉庫中的發(fā)布版本的構(gòu)件。
- Releases:策略為 Release 的宿主倉庫,用來部署公司或組織內(nèi)部的發(fā)布版本構(gòu)件。
- Snapshots:策略為 Snapshot 的宿主倉庫,用來部署公司或組織內(nèi)部的快照版本構(gòu)件。
- 3rd party:策略為 Release 的宿主倉庫,用來部署第三方發(fā)布版本構(gòu)件,這些構(gòu)件一般無法從任何遠(yuǎn)程倉庫中獲得。
- Public Repositories:該倉庫組將上述所有存儲策略為 Release 的倉庫聚合并通過統(tǒng)一的地址提供服務(wù)。
Nexus 倉庫分類
Nexus 倉庫按照類型(Type)區(qū)分,主要分為以下 3 個(gè)類型:
- 代理倉庫(proxy):用來代理遠(yuǎn)程公共倉庫,如 Maven 中央倉庫、JBoss 遠(yuǎn)程倉庫。
- 宿主倉庫(hosted):又稱 Nexus 本地倉庫,該倉庫通常用來部署本地項(xiàng)目所產(chǎn)生的構(gòu)件。
- 倉庫組(group):用來聚合代理倉庫和宿主倉庫,為這些倉庫提供統(tǒng)一的服務(wù)地址,以便 Maven 可以更加方便地獲得這些倉庫中的構(gòu)件。
為了更加直觀的理解倉庫組、代理倉庫和宿主倉庫的概念,我們通過下圖展示它們的用途和區(qū)別。
圖2: Nexus倉庫分類
由上圖可知:
- Maven 可以直接從宿主倉庫中下載構(gòu)件。
- Maven 也可以從代理倉庫中下載構(gòu)件,代理倉庫會從遠(yuǎn)程倉庫下載并緩存構(gòu)件。
- Maven 還可以從倉庫組中下載構(gòu)件,倉庫組會從其包含的宿主倉庫和代理倉庫中獲取構(gòu)件。
Nexus創(chuàng)建倉庫
首先,我們需要創(chuàng)建兩個(gè)宿主倉庫,分別用來存儲從本地上傳到 Nexus 的 Snapshot 和 Release 版本的構(gòu)件,操作步驟如下。
1. 點(diǎn)擊左邊導(dǎo)航欄中的 Repositories,如下圖。
圖1:Nexus 導(dǎo)航
2. 點(diǎn)擊 Nexus 倉庫列表上方的 Add… 按鈕,在下拉菜單中選擇 Hosted Repository,如下圖。
圖2:添加宿主倉庫
3. 在宿主倉庫配置界面,填寫對應(yīng)信息,然后點(diǎn)擊 Save 按鈕進(jìn)行保存,如下圖。
圖3:配置宿主倉庫
宿主倉庫配置如下:
配置 | 說明 |
---|---|
Repository ID | 倉庫 ID。 |
Repository Name | 倉庫名稱。 |
Repository Type | 倉庫的類型,如 hosted、proxy 等等。 |
Provider | 用來確定倉庫的格式,一般默認(rèn)選擇 Maven2。 |
Repository Policy | 倉庫的策略。 |
Default Local Storage Location | 倉庫默認(rèn)存儲目錄,例如 D:\nexus-2.14.20-02-bundle\sonatype-work\nexus\indexer\bianchengbang_Snapshot_hosted_ctx。 |
Override Local Storage Location | 自定義倉庫存儲目錄。 |
Deployment Policy | 倉庫的部署策略。 |
Allow File Browsing | 用來控制是否允許瀏覽倉庫內(nèi)容,一般選擇 true。 |
Include in Search | 用來控制該倉庫是否創(chuàng)建索引并提供搜索功能。 |
Publish URL | 用來控制是否通過 URL 提供服務(wù)。 |
Not Found Cache TTL | 緩存某構(gòu)件不存在信息的時(shí)間,默認(rèn)取值為 1440,表示若某一個(gè)構(gòu)件在倉庫中沒有找到,在 1440 分鐘內(nèi)再次接收到該構(gòu)件的請求,則直接返回不存在信息,不會再次查找。 |
4. 查看 Nexus 倉庫列表,可以看到自定義的宿主倉庫已經(jīng)創(chuàng)建完成,如下圖。
圖4:Nexus 倉庫列表(猛擊圖片,查看原圖)
重復(fù)以上步驟,再創(chuàng)建一個(gè)名稱為 bianchengbang_Release_hosted ,策略為 hosted 的宿主倉庫。
圖5:Nexus 倉庫列表-宿主倉庫(猛擊圖片,查看原圖)
創(chuàng)建 Nexus 代理倉庫
下面我們創(chuàng)建一個(gè)代理倉庫,用來下載和緩存中央倉庫的構(gòu)件,操作步驟如下。
點(diǎn)擊 Nexus 倉庫列表上方的 Add… 按鈕,在下拉菜單中選擇 Proxy Repository,如圖 5 所示。
圖5:添加代理倉庫
在代理倉庫配置界面,填寫對應(yīng)信息,然后點(diǎn)擊 Save 按鈕進(jìn)行保存,如圖 6 所示。
圖6:Nexus 代理倉庫配置界面
代理倉庫配置中,倉庫 ID、倉庫名稱、Provider、Policy 以及 Default Local Storage Location 等配置的含義與宿主倉庫相同,不再贅述。需要注意的是,代理倉庫的 Repository Type 的取值是 proxy。
代理倉庫配置如下表。
配置 | 說明 |
---|---|
Remote Storage Location | 遠(yuǎn)程倉庫或中央倉庫的地址,它是 Nexus 代理倉庫最重要得配置,必須輸入有效值,通常取值為 https://repo1.maven.org/maven2/。 |
Download Remote Indexes 是否下載遠(yuǎn)程倉庫的索引。 | |
Auto Blocking Enabled | 是否啟用自動阻止,即當(dāng) Nexus 無法連接中央倉庫或遠(yuǎn)程倉庫時(shí),是否一直等待。取值為 true 表示不再等待,直接通知客戶端無法連接,并返回。 |
File Content Validation | 是否啟用文件內(nèi)容校驗(yàn)。 |
Checksum Policy | 配置校驗(yàn)和出錯時(shí)的策略,用戶可以選擇忽略、警告、記錄警告信息或拒絕下載等多種策略。 |
Artifact Max Age 構(gòu)件緩存的最長時(shí)間,對于發(fā)布版本倉庫來說,默認(rèn)值為 -1,表示構(gòu)件緩存后,就一直保存著,不再重新下載。對于快照版本倉庫來說,默認(rèn)值為 1440 分鐘,表示每隔一天重新緩存一次代理的構(gòu)件。 | |
Metadata Max Age | 倉庫元數(shù)據(jù)緩存的最長時(shí)間。 |
Item Max Age | 項(xiàng)目緩存的最長時(shí)間。 |
創(chuàng)建 Nexus 倉庫組
下面我們將創(chuàng)建一個(gè)倉庫組,并將剛剛創(chuàng)建的 3 個(gè)倉庫都聚合起來,操作步驟如下。
點(diǎn)擊倉庫列表上方的 Add… 按鈕,在下拉菜單中選擇 Repository Group,如下圖。
圖7:Nexus 添加倉庫組
在倉庫組配置界面,填寫對應(yīng)信息,并將 bianchengbang_central_proxy、bianchengbang_Release_hosted 和 bianchengbang_Snapshot_hosted 3 個(gè)倉庫添加到倉庫組中,最后點(diǎn)擊 Save 按鈕進(jìn)行保存,如下圖。
圖8:Nexus 倉庫組配置
查看 Nexus 倉庫列表,可以看到 bianchengbang_repository_group 倉庫組已經(jīng)創(chuàng)建完成,如下圖。
圖9:Nexus 倉庫列表-倉庫組(猛擊圖片,查看原圖)
Nexus索引與構(gòu)件搜索
我們知道,Maven 中央倉庫為用戶提供了多達(dá)數(shù)十萬構(gòu)件,而 Nexus 可以代理所有的遠(yuǎn)程倉庫(包括 Maven 中央倉庫),可見 Nexus 倉庫中構(gòu)件的數(shù)量相當(dāng)龐大。用戶想要在這么多構(gòu)件中,快速的查找自己所需的構(gòu)件,一個(gè)最直接有效的方式就是:搜索。
Nexus 作為一款成熟的倉庫管理工具,它通過維護(hù)倉庫的索引提供了構(gòu)件搜索功能,以便幫助用戶方便快速地找到所需構(gòu)件。
我們將詳細(xì)為您介紹 Nexus 索引以及構(gòu)件搜索功能。
索引
Nexus 能夠遍歷倉庫的所有內(nèi)容,搜集它們的坐標(biāo),校驗(yàn)和以及所包含的 Java 類等信息,然后以索引( nexus-indexer) 的形式保存起來。Nexus 索引保存在 Nexus 安裝目錄下 \sonatype-work\nexus\indexer 目錄中,該目錄下每個(gè)子目錄都代表 Nexus 中的一個(gè)倉庫,用來存放各個(gè)倉庫的索引 ,如下圖所示。
圖1:Nexus 索引目錄
大多數(shù)的遠(yuǎn)程公共倉庫(例如,中央倉庫)都維護(hù)了一個(gè)這樣的索引,因此本地的 Nexus 在下載到這個(gè)索引后,就能在此基礎(chǔ)上為用戶提供構(gòu)件搜索和瀏覽等服務(wù)。需要注意的是,并不是所有的公共倉庫都提供了索引 ,對于那些沒有提供索引的倉庫來說,我們是無法對其進(jìn)行搜索的。
下載索引
Nexus 索引下載功能默認(rèn)是關(guān)閉的,如果想在 Nexus 中搜索遠(yuǎn)程倉庫中的構(gòu)件,就需要先開啟索引下載功能。
以 bianchengbang_central_proxy 代理倉庫(代理 Maven 中央倉庫)為例,在圖 2 所示的位置就可以控制它的索引下載功能,true 表示開啟索引下載,false 表示關(guān)閉索引下載。
圖2:遠(yuǎn)程索引下載
開啟索引下載功能后,點(diǎn)擊導(dǎo)航欄中 Scheduled Tasks 鏈接,查看調(diào)度任務(wù)列表。若 Nexus 正在下載索引,我們就能看到如圖 3 所示的任務(wù),其任務(wù)狀態(tài)為 Running。在索引下載完畢后,該任務(wù)就會消失。
圖3:Nexus 調(diào)度任務(wù)列表(猛擊圖片,查看原圖)
由于 Maven 中央倉庫的內(nèi)容較多,其索引文件比較大,因此 Nexus 下載該文件所需的時(shí)間較長,需要我們耐心等待。
索引下載完成后,點(diǎn)擊倉庫列表中的 bianchengbang_central_proxy 代理倉庫,然后在列表下方選擇 Browse Index 選項(xiàng)卡,我們可以看到該倉庫內(nèi)容的樹形結(jié)構(gòu),如圖 4 所示。
圖4:Nexus 倉庫索引樹形結(jié)構(gòu)圖
構(gòu)件搜索
Nexus 通過維護(hù)索引,為用戶提供了關(guān)鍵字搜索、類名搜索、坐標(biāo)搜索等多種搜索功能,通過這些功能,頁面中能夠清晰地展示出結(jié)果構(gòu)件的坐標(biāo)以及所屬倉庫。用戶可以直接下載相應(yīng)的構(gòu)件,也可以直接復(fù)制構(gòu)件的 XML 依賴聲明,到項(xiàng)目中使用。
在 Nexus 界面左邊導(dǎo)航欄中有一個(gè)搜索框,在搜索框內(nèi)輸入所需構(gòu)件的關(guān)鍵字,單擊搜索按鈕就能快速得到搜索結(jié)果,如圖 5 所示。
圖5:Nexus 搜索功能(猛擊圖片,查看原圖)
搜索結(jié)果頁中的每一行代表一類構(gòu)件,其中包含了 Group、Artifact、版本、流行版本、以及下載鏈接等信息。點(diǎn)擊其中某一行,下方就會出現(xiàn)該構(gòu)件的詳細(xì)信息,其中不但包含構(gòu)件的坐標(biāo)等基本信息,還包含一段 XML 依賴聲明,我們可以將這段 XML 依賴聲明直接復(fù)制到項(xiàng)目的 POM 中使用,如圖 6 所示。
圖6:Nexus 搜索結(jié)果詳情
點(diǎn)擊右側(cè)的 Artifact 選項(xiàng)卡,還能看到構(gòu)件的大小、上傳時(shí)間、最后修改時(shí)間、倉庫中的相對位置、校驗(yàn)和等信息,如圖 7 所示。
圖7:Nexus 搜索詳情頁 Artifact
除了關(guān)鍵字搜索外,Nexus 還提供了一些高級搜索功能,例如類名搜索、GAV 搜索以及“校驗(yàn)和”搜索。我們可以通過點(diǎn)擊搜索頁左上角的下拉菜單,選擇高級搜索功能。
圖8:Nexus 高級搜索功能
Nexus 還具有以下高級搜索功能:
- 類名搜索(Keyword Search):搜索包含某個(gè) Java 類的構(gòu)件。
- GAV 搜索(GAV Search):通過設(shè)置 Group、Artifact、版本等信息進(jìn)行搜索。
- 校驗(yàn)和搜索(Checksum Search):通過使用“校驗(yàn)和”搜索構(gòu)件。
這些搜索功能的使用都十分的簡單,我們可以根據(jù)自己的需求選擇合適的搜索功能。
從Nexus下載構(gòu)件
Nexus 作為最流行的 Maven 私服之一,使用它主要目的之一:代理遠(yuǎn)程倉庫,即當(dāng) Maven 需要下載構(gòu)件到本地倉庫使用時(shí),不再請求外部的遠(yuǎn)程倉庫,而直接從 Nexus 中下載。我們將介紹如何配置 Maven 從 Nexus 下載構(gòu)件。
將 Nexus 的代理倉庫配置到 Maven 項(xiàng)目中,用它們代替外部的遠(yuǎn)程倉庫,即可實(shí)現(xiàn) Maven 從 Nexus 下載構(gòu)件。
- 在 pom.xml 中配置
- 在 setting.xml 中配置
在 pom.xml 中配置
在 Maven 項(xiàng)目的 pom.xml 中增加以下配置,可以為當(dāng)前項(xiàng)目配置 Nexus 上的 bianchengbang_central_proxy 代理倉庫。
<!--聲明一個(gè)或多個(gè)遠(yuǎn)程倉庫 -->
<repositories>
<!-- 聲明一個(gè) Nexus 私服上的倉庫 -->
<repository>
<!--倉庫id -->
<id>nexus</id>
<!-- 倉庫的名稱 -->
<name>nexus</name>
<!--倉庫的地址 -->
<url>http://localhost:8082/nexus/content/repositories/bianchengbang_central_proxy/</url>
<!-- 是否開啟該倉庫的 release 版本下載支持 -->
<releases>
<enabled>true</enabled>
</releases>
<!-- 是否開啟該倉庫的 snapshot 版本下載支持 -->
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<!-- 聲明一個(gè)或多個(gè)遠(yuǎn)程插件倉庫 -->
<pluginRepositories>
<!--聲明一個(gè) Nexus 私服上的插件倉庫 -->
<pluginRepository>
<!--插件倉庫 id -->
<id>nexus</id>
<!--插件倉庫 名稱 -->
<name>nexus</name>
<!-- 配置的插件倉庫的地址 -->
<url>http://localhost:8082/nexus/content/repositories/bianchengbang_central_proxy/</url>
<!-- 是否開啟該插件倉庫的 release 版本下載支持 -->
<releases>
<enabled>true</enabled>
</releases>
<!-- 是否開啟該插件倉庫的 snapshot 版本下載支持 -->
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
其中,在 repositories 元素下可以使用 repository 子元素聲明一個(gè)或多個(gè)遠(yuǎn)程倉庫,一個(gè) repository 元素對應(yīng)一個(gè)遠(yuǎn)程倉庫。
repository 各個(gè)子元素含義如下表。
子元素 | 含義 |
---|---|
id | 倉庫的唯一標(biāo)識。需要注意的是,Maven 中央倉庫的 id 為 central,如果其他的倉庫也使用該 id,就會覆蓋中央倉庫的配置。 |
name | 倉庫的名稱。 |
url | 倉庫的地址,該地址一般都是基于 HTTP 協(xié)議的,通過瀏覽器即可訪問該地址,瀏覽倉庫中的構(gòu)件。 |
releases/snapshots | 用來控制 Maven 對于發(fā)布和快照版本構(gòu)件的下載。它們都有一個(gè) enabled 子元素,enabled 的取值為 true,表示開啟發(fā)布版或快照版的下載支持,否則表示關(guān)閉下載支持。 |
在 pluginRepositories 元素下可以使用 pluginRepository 子元素聲明一個(gè)或多個(gè)遠(yuǎn)程插件倉庫(包括私服上的倉庫),一個(gè) pluginRepository 元素對應(yīng)一個(gè)遠(yuǎn)程插件倉庫。pluginRepository 下所有子元素的含義均與與 repository 的子元素相同,這里就不再做過多贅述了。
示例 1
將以上配置加入 Maven 項(xiàng)目 Root 的 POM 文件中,并手動清空本地倉庫的所有依賴構(gòu)件(目的是為了讓 Maven 重新獲取構(gòu)件)。
打開命令行窗口,跳轉(zhuǎn)到 Root 所在的目錄下,執(zhí)行以下 mvn 命令。
mvn clean install
執(zhí)行結(jié)果如下。
圖1: 使用 Nexus 私服構(gòu)建結(jié)果
由圖 1 的構(gòu)建過程可以看出,Root 項(xiàng)目構(gòu)建所需的構(gòu)建是從 Nexus 私服的 banchengbang_central_proxy 代理倉庫中下載的,而不是從 Maven 中央倉庫去下載。
在 setting 中配置
在 pom.xml 中配置 Nexus ,只對當(dāng)前項(xiàng)目有效,在實(shí)際應(yīng)用中,我們往往希望能夠通過一次配置就能讓本機(jī)中的所有 Maven 項(xiàng)目都使用 Nexus。此時(shí),您可能會想到在 Maven 的 setting.xml 文件中進(jìn)行配置,但 setting.xml 是不支持直接配置 repositories 和 pluginRepositories 。所幸 Maven 提供了 profile 機(jī)制,能夠讓我們將倉庫配置放在 profile 中。
<profiles>
<profile>
<id>nexus</id>
<!--聲明一個(gè)或多個(gè)遠(yuǎn)程倉庫 -->
<repositories>
<!-- 聲明一個(gè) Nexus 私服上的倉庫 -->
<repository>
<!--倉庫id -->
<id>nexus</id>
<!-- 倉庫的名稱 -->
<name>nexus</name>
<!--倉庫的地址 -->
<url>http://localhost:8082/nexus/content/repositories/bianchengbang_central_proxy/</url>
<!-- 是否開啟該倉庫的 release 版本下載支持 -->
<releases>
<enabled>true</enabled>
</releases>
<!-- 是否開啟該倉庫的 snapshot 版本下載支持 -->
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<!-- 聲明一個(gè)或多個(gè)遠(yuǎn)程插件倉庫 -->
<pluginRepositories>
<!--聲明一個(gè) Nexus 私服上的插件倉庫 -->
<pluginRepository>
<!--插件倉庫 id -->
<id>nexus</id>
<!--插件倉庫 名稱 -->
<name>nexus</name>
<!-- 配置的插件倉庫的地址 -->
<url>http://localhost:8082/nexus/content/repositories/bianchengbang_central_proxy/</url>
<!-- 是否開啟該插件倉庫的 release 版本下載支持 -->
<releases>
<enabled>true</enabled>
</releases>
<!-- 是否開啟該插件倉庫的 snapshot 版本下載支持 -->
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>
以上配置中使用了一個(gè) id 為 nexus 的 profile,這個(gè) profile 中包含了與倉庫相關(guān)的配置,同時(shí)配置中還使用了一個(gè) activeProfiles 元素將 id 為 nexus 的 profile 激活。當(dāng)本機(jī)有 Maven 項(xiàng)目構(gòu)建時(shí),profile 中的倉庫配置就會應(yīng)用到項(xiàng)目中。
示例 2
將以上配置分別添加到 Maven 安裝目錄\conf 和本地倉庫目錄下的 setting.xml 中,并將 Root 項(xiàng)目 POM 文件中的 repositories 和 pluginRepositories 等倉庫設(shè)置刪除。
打開命令行窗口,跳轉(zhuǎn)到 Root 項(xiàng)目下,執(zhí)行以下 mvn 命令。
mvn clean install
執(zhí)行結(jié)果如下。
圖2:Nexus 全局配置倉庫
setting.xml 中添加鏡像
Nexus 私服通常會與鏡像(mirror)結(jié)合使用,使 Nexus 成為所有遠(yuǎn)程倉庫的私服,這樣不僅可以從 Nexus 中獲取所有所需構(gòu)件,還能將配置集中到 Nexus 私服中,簡化 Maven 本身的配置。
我們可以創(chuàng)建一個(gè)匹配任何倉庫的鏡像,鏡像的地址為 Nexus 中倉庫的地址,這樣 Maven 對于任何構(gòu)件的下載請求都會被攔截跳轉(zhuǎn)到 Nexus 私服中,其具體配置如下。
<mirrors>
<mirror>
<id>nexus</id>
<name>nexus name</name>
<mirrorOf>*</mirrorOf>
<url>http://localhost:8082/nexus/content/groups/bianchengbang_repository_group/</url>
</mirror>
</mirrors>
<profiles>
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>central</id>
<url>http://localhost:8082/nexus/content/repositories/bianchengbang_central_proxy/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<url>http://localhost:8082/nexus/content/repositories/bianchengbang_central_proxy/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>
倉庫和插件倉庫的配置中,它們的 id 取值都是 central,即它們的設(shè)置覆蓋了 Maven 中央倉庫,但此時(shí)這里的 URL 已經(jīng)無法起到任何作用,因?yàn)殓R像的匹配規(guī)則是 *,所有的請求都已經(jīng)被攔截,跳轉(zhuǎn)到 Nexus 私服的地址。
部署構(gòu)件到Nexus
如果僅僅是為了代理遠(yuǎn)程的公共倉庫,那么 Nexus 的代理倉庫就完全能夠滿足需要,但是我們知道,Nexus 除了代理倉庫外,還有另一種倉庫:宿主倉庫。
宿主倉庫的主要作用是存儲公司或組織內(nèi)部的構(gòu)件,以及一些無法從公共倉庫獲取的第三方構(gòu)件(JDBC 驅(qū)動),供用戶下載使用。用戶可以通過配置 Maven 將構(gòu)件自動部署到 Nexus 宿主倉庫,也可以在 Nexus 界面手動上傳構(gòu)件。
使用 Maven 部署構(gòu)件到 Nexus
日常開發(fā)中,快照版本構(gòu)件可以直接部署到 Nexus 中策略為 Snapshot 的宿主倉庫中,而最終發(fā)布的版本則應(yīng)該部署到 Nexus 中策略為 Release 的宿主倉庫中。
使用 Maven 將構(gòu)件部署到 Nexus 宿主倉庫中主要分為 3 步:
- 配置項(xiàng)目的 POM 文件。
- 在 setting.xml 中配置認(rèn)證信息。
- 使用 mvn 命令部署構(gòu)件。
下面我們通過一個(gè)實(shí)例來詳細(xì)介紹如何使用 Maven 部署構(gòu)件到 Nexus 宿主倉庫。
1. 配置項(xiàng)目的 POM 文件
創(chuàng)建一個(gè)名為 test-upload-snapshot 的 Maven 項(xiàng)目,并在其 POM 文件中添加如下配置。
<project>
...
<distributionManagement>
<repository>
<id>bianchengbang_Release_hosted</id>
<url>http://localhost:8082/nexus/content/repositories/bianchengbang_Release_hosted/</url>
</repository>
<snapshotRepository>
<id>bianchengbang_Snapshot_hosted</id>
<url>http://localhost:8082/nexus/content/repositories/bianchengbang_Snapshot_hosted/</url>
</snapshotRepository>
</distributionManagement>
</project>
以上配置說明如下:
- distributionManagement 元素:負(fù)責(zé)將指定的構(gòu)件部署到 Nexus 指定的倉庫中。
- repository 元素:distributionManagement 的子元素,用于定義部署 Release 版本的構(gòu)件被部署的倉庫。它有 2 子元素:id 和 url ,其中 id 為 Nexus 倉庫的唯一標(biāo)識,url 為 Nexus 宿主倉庫的 url。
- snapshotRepository 元素:distributionManagement 的子元素,用于定義部署 Snapshot 版本的構(gòu)件被部署的倉庫。它也有 2 子元素:id 和 url ,且與 repository 中含義一致。
2. 在 setting.xml 中配置認(rèn)證信息
最初版本的 Nexus 沒有為宿主倉庫提供任何的安全措施。如果宿主倉庫開啟了部署功能,任何人可以連接并部署構(gòu)件至這個(gè)倉庫,這顯然是極不安全的。因此,現(xiàn)在的 Nexus 中增加了權(quán)限認(rèn)證,Nexus 對于匿名用戶是只讀的,若想部署構(gòu)件到 Nexus 中,則需要在 setting.xml 中配置如下認(rèn)證信息。
<settings>
...
<servers>
<server>
<id>bianchengbang_Release_hosted</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>bianchengbang_Snapshot_hosted</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
</settings>
注意:以上配置中,server 元素中的 id 必須和 pom.xml 中 distributionManagement 元素對應(yīng)倉庫的 id 保持一致。Maven 在部署構(gòu)件時(shí),會先根據(jù) id 查找用戶名稱和密碼進(jìn)行認(rèn)證和登錄,然后將構(gòu)件部署到對應(yīng)得宿主倉庫。
3. 使用 mvn 命令部署構(gòu)件
完成以上配置之后,就可以使用 Maven 命令將構(gòu)件部署到宿主倉庫了,操作步驟如下。
1)打開命令行窗口,跳轉(zhuǎn)到 test-upload-snapshot 項(xiàng)目得目錄下,執(zhí)行如下 Maven 命令。
mvn clean deploy
2) Maven 命令執(zhí)行結(jié)果如下圖。
[INFO] Scanning for projects...
[INFO]
[INFO] ---------------< net.biancheng.www:test-upload-snapshot >---------------
[INFO] Building test-upload-snapshot 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ test-upload-snapshot ---
[INFO] Deleting D:\eclipse workSpace 3\test-upload-snapshot\target
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ test-upload-snapshot ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ test-upload-snapshot ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ test-upload-snapshot ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ test-upload-snapshot ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ test-upload-snapshot ---
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ test-upload-snapshot ---
[INFO] Building jar: D:\eclipse workSpace 3\test-upload-snapshot\target\test-upload-snapshot-0.0.1-SNAPSHOT.jar
[INFO]
[INFO] --- maven-install-plugin:2.4:install (default-install) @ test-upload-snapshot ---
[INFO] Installing D:\eclipse workSpace 3\test-upload-snapshot\target\test-upload-snapshot-0.0.1-SNAPSHOT.jar to D:\myRep
ository\repository\net\biancheng\www\test-upload-snapshot\0.0.1-SNAPSHOT\test-upload-snapshot-0.0.1-SNAPSHOT.jar
[INFO] Installing D:\eclipse workSpace 3\test-upload-snapshot\pom.xml to D:\myRepository\repository\net\biancheng\www\te
st-upload-snapshot\0.0.1-SNAPSHOT\test-upload-snapshot-0.0.1-SNAPSHOT.pom
[INFO]
[INFO] --- maven-deploy-plugin:2.7:deploy (default-deploy) @ test-upload-snapshot ---
Downloading from bianchengbang_Snapshot_hosted: http://localhost:8082/nexus/content/repositories/bianchengbang_Snapshot_
hosted/net/biancheng/www/test-upload-snapshot/0.0.1-SNAPSHOT/maven-metadata.xml
Downloaded from bianchengbang_Snapshot_hosted: http://localhost:8082/nexus/content/repositories/bianchengbang_Snapshot_h
osted/net/biancheng/www/test-upload-snapshot/0.0.1-SNAPSHOT/maven-metadata.xml (787 B at 9.2 kB/s)
Uploading to bianchengbang_Snapshot_hosted: http://localhost:8082/nexus/content/repositories/bianchengbang_Snapshot_host
ed/net/biancheng/www/test-upload-snapshot/0.0.1-SNAPSHOT/test-upload-snapshot-0.0.1-20210322.030343-5.jar
Uploaded to bianchengbang_Snapshot_hosted: http://localhost:8082/nexus/content/repositories/bianchengbang_Snapshot_hoste
d/net/biancheng/www/test-upload-snapshot/0.0.1-SNAPSHOT/test-upload-snapshot-0.0.1-20210322.030343-5.jar (2.1 kB at 28 k
B/s)
Uploading to bianchengbang_Snapshot_hosted: http://localhost:8082/nexus/content/repositories/bianchengbang_Snapshot_host
ed/net/biancheng/www/test-upload-snapshot/0.0.1-SNAPSHOT/test-upload-snapshot-0.0.1-20210322.030343-5.pom
Uploaded to bianchengbang_Snapshot_hosted: http://localhost:8082/nexus/content/repositories/bianchengbang_Snapshot_hoste
d/net/biancheng/www/test-upload-snapshot/0.0.1-SNAPSHOT/test-upload-snapshot-0.0.1-20210322.030343-5.pom (2.4 kB at 36 k
B/s)
Downloading from bianchengbang_Snapshot_hosted: http://localhost:8082/nexus/content/repositories/bianchengbang_Snapshot_
hosted/net/biancheng/www/test-upload-snapshot/maven-metadata.xml
Downloaded from bianchengbang_Snapshot_hosted: http://localhost:8082/nexus/content/repositories/bianchengbang_Snapshot_h
osted/net/biancheng/www/test-upload-snapshot/maven-metadata.xml (297 B at 11 kB/s)
Uploading to bianchengbang_Snapshot_hosted: http://localhost:8082/nexus/content/repositories/bianchengbang_Snapshot_host
ed/net/biancheng/www/test-upload-snapshot/0.0.1-SNAPSHOT/maven-metadata.xml
Uploaded to bianchengbang_Snapshot_hosted: http://localhost:8082/nexus/content/repositories/bianchengbang_Snapshot_hoste
d/net/biancheng/www/test-upload-snapshot/0.0.1-SNAPSHOT/maven-metadata.xml (787 B at 14 kB/s)
Uploading to bianchengbang_Snapshot_hosted: http://localhost:8082/nexus/content/repositories/bianchengbang_Snapshot_host
ed/net/biancheng/www/test-upload-snapshot/maven-metadata.xml
Uploaded to bianchengbang_Snapshot_hosted: http://localhost:8082/nexus/content/repositories/bianchengbang_Snapshot_hoste
d/net/biancheng/www/test-upload-snapshot/maven-metadata.xml (297 B at 5.2 kB/s)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.342 s
[INFO] Finished at: 2021-03-22T11:03:44+08:00
[INFO] ------------------------------------------------------------------------
在 Nexus 界面的倉庫列表選中 bianchengbang_Snapshot_hosted 宿主倉庫,在下方的 Browse Index 選項(xiàng)卡中,可以看到 test-upload-snapshot 構(gòu)件已經(jīng)被部署到該倉庫中,如圖 1 所示。
圖1:使用 Maven 部署構(gòu)件到 Nexus
手動上傳構(gòu)件
有些 Jar 文件(如 Oracle 的 JDBC 驅(qū)動)由于許可證等原因,無法存放在公開倉庫中。此外,還有一些小型的開源項(xiàng)目,它們沒有將自己的構(gòu)件分發(fā)到公共倉庫中,也沒有維護(hù)自己的倉庫,因此這些構(gòu)件是無法從公共倉庫中獲得的。若 Maven 項(xiàng)目中需要這類構(gòu)件,我們就需要將構(gòu)件下載到本地,然后手動上傳到 Nexus 私服。
我們還是以 Maven 項(xiàng)目 App-Core-lib 為例,將其打包后手動上傳到 Nexus 內(nèi)置宿主倉庫 3rd party 中,具體步驟如下。
1. 打開命令行窗口,跳轉(zhuǎn)到 App-Core-lib 的目錄下,執(zhí)行如下 mvn 命令,對項(xiàng)目進(jìn)行打包。
mvn clean package
2.打包完成后,進(jìn)入 App-Core-lib\target 目錄,可以看到 Maven 已經(jīng)將該項(xiàng)目打包成了一個(gè) jar 文件,如圖 2 所示。
圖2:Maven 打包生成 jar 文件
3. 在 Nexus 界面的倉庫列表中選擇 3rd party 倉庫,在下方選擇 Artifact Upload 選項(xiàng)卡,其中 GAV Definition 用于定義上傳構(gòu)件的坐標(biāo)信息。
GAV Definition 中提供了兩種定義構(gòu)件坐標(biāo)的方式:
- 若該構(gòu)件通過 Maven 構(gòu)建產(chǎn)生的,則可以選擇 From POM,Nexus 會自動從 POM 中獲取構(gòu)件的坐標(biāo)。
- 若該構(gòu)件來自第三方,則只能選擇 GAV Parameters,手動定義構(gòu)件的坐標(biāo)。
以上 2 種方式操作時(shí)會略有不同,下面我們分別對它們進(jìn)行介紹。
From POM
若該構(gòu)件是通過 Maven 構(gòu)建產(chǎn)生的,那么可以在 GAV Definition 下拉列表中,選擇 From POM,然后指定該構(gòu)件所屬項(xiàng)目的 pom.xml,Nexus 會自動從 pom.xml 中獲取構(gòu)件的坐標(biāo)。最后點(diǎn)擊頁面最下方的 Upload Artifact(s) 按鈕,將構(gòu)件上傳到倉庫中,如圖 3 所示。
圖3:Nexus 手動上傳構(gòu)件
GAV Paramters
若構(gòu)件不是通過 Maven 構(gòu)建的,而是來自第三方(例如 Oracle 的 JDBC 驅(qū)動),則只能在 GAV Definition 下拉列表中,選擇 GAV Parameters 手動定義構(gòu)件的坐標(biāo)。
定義好坐標(biāo)后,點(diǎn)擊 Select Artifact(s) to Upload… 按鈕選擇要上傳的構(gòu)件,然后點(diǎn)擊 Add Artifact 按鈕將其加入上傳列表中。最后點(diǎn)擊頁面最下方的 Upload Artifact(s) 按鈕,將構(gòu)件上傳到倉庫中,如圖 4 所示。
圖4:Nexus 第三方構(gòu)件手動上傳
4. 在倉庫列表中選中 3rd party 宿主倉庫,在下方的 Browse Index 選項(xiàng)卡中,可以看到構(gòu)件已經(jīng)被部署到該倉庫中,如圖 5 所示。
圖5:第三方構(gòu)件手動上傳到Nexus
Nexus3的使用
目前 Nexus 分為 Nexus 2 和 Nexus 3 兩個(gè)大版本,它們是并行的關(guān)系。與 Nexus 2 相比,Nexus 3 具有很多優(yōu)勢,例如支持更多的倉庫格式、優(yōu)化了用戶的使用界面以及更加強(qiáng)大的搜索功能等等。
目前使用最多的,運(yùn)行最穩(wěn)定是 Nexus 2,但隨著 Nexus 3 對 Maven 的支持越來越穩(wěn)定,很多公司和組織都陸續(xù)開始使用 Nexus 3。
本節(jié)我們將介紹 Nexus 3 的安裝和訪問過程。
下載 Nexus 3
1. 進(jìn)入 Nexus 3.x 下載頁面(目前最新版是 3.30.0-01),根據(jù)操作選擇相應(yīng)的版本進(jìn)行下載。
圖1:Nexus 下載頁面
2. 將下載的安裝包解壓到本地,可獲得 nexus-3.30.0-01 和 sonatype-work 兩個(gè)目錄,如圖 2。
圖2:Nexus 解壓
其中:
- nexus-3.30.0-01:此目錄包含 Nexus 運(yùn)行所需要的文件以及所有必需的其他組件,如啟動腳本、依賴 jar 包等。
- sonatype-work:該目錄包含所有由 Nexus 存儲和管理的倉庫,組件和其他數(shù)據(jù)。
啟動 nexus 服務(wù)
我們可以在 nexus-3.30.0-01\bin 目錄下發(fā)現(xiàn)一個(gè)名稱位 nexus.exe 的可執(zhí)行文件,它是在 Windows 平臺上運(yùn)行 Nexus 的啟動腳本,該腳本包含了啟動服務(wù)、停止服務(wù)、創(chuàng)建服務(wù)和刪除服務(wù)等命令。
打開命令行窗口,跳轉(zhuǎn)到 nexus-3.30.0-01\bin 目錄下,執(zhí)行以下命令,啟動 Nexus 服務(wù)。
nexus /run
執(zhí)行結(jié)果結(jié)果如圖 3 所示,則表示 Nexus 啟動完成。
圖3:Nexus 3 啟動完成
訪問 nexus 3.x
啟動完成后,在瀏覽器地址欄輸入 http://localhost:8081/,訪問 Nexus 界面,如圖 4 所示。
圖4:Nexus 3 用戶界面
點(diǎn)擊 Nexus 3.x 首頁右上角的“Sign in”按鈕,在登錄頁面輸入用戶名和 密碼(默認(rèn)用戶名為 admin,默認(rèn)密碼則保存在 /sonatype-work/nexus3 目錄下的 admin.password 文件中),點(diǎn)擊“Sign in”按鈕登錄,如圖 5 所示。
圖5:Nexus 3 登錄界面
登錄成功后,結(jié)果如圖 6 所示。
圖6:Nexus 3 登錄成功
Nexus離線更新中央倉庫索引
我們知道 Nexus 可以遠(yuǎn)程下載和緩存中央倉庫索引,但是對于國內(nèi)用戶來說,Nexus 遠(yuǎn)程更新索引使用的站點(diǎn)位于國外且部分索引文件較大,經(jīng)常會出現(xiàn)下載速度緩慢或索引文件不完整等情況。下面我們將介紹一種更加快捷可靠的索引更新方式:離線更新中央倉庫索引。
離線更新中央倉庫索引,顧名思義,就是直接將索引文件下載,然后拷貝至 Nexus 工作目錄中,以達(dá)到離線更新索引的目的。
離線更新中央倉庫索引主要分為以下 3 步:
- 文件下載
- 解壓
- 更新并驗(yàn)證索引
文件下載
首先,我們需要下載以下 3 個(gè)文件:
- nexus-maven-repository-index.gz
- nexus-maven-repository-index.properties
- indexer-cli-5.1.1.jar
1. 瀏覽器訪問 https://repo.maven.apache.org/maven2/.index/ ,下載 nexus-maven-repository-index.gz 和 nexus-maven-repository-index.properties 兩個(gè)文件(一般位于列表的末尾),如圖 1 所示。
圖1:Nexus 中央倉庫離線索引下載列表
2. 瀏覽器訪問 http://mvnrepository.com/,搜索 Indexer CLI,選擇 Maven :: Indexer CLI,如圖 2 所示。
圖2:Nexus 索引生成器
3. 建議選擇 5.1.1 版本,如圖 3 所示。
圖3:選擇 Indexer CLI 版本
4. 在 Indexer CLI ? 5.1.1 版本詳情頁,點(diǎn)擊 View All,查看該版本包含的所有文件。
圖4:Nexus indexer-cli 5.1.1 詳情
5. 在文件列表中,點(diǎn)擊 indexer-cli-5.1.1.jar ,下載該文件,如圖 5 所示。
圖5:Nexus indexer-cli 文件列表
解壓
1. 將 nexus-maven-repository-index.gz 、nexus-maven-repository-index.properties 以及 indexer-cli-5.1.1.jar 三個(gè)文件都存放到 index(目錄的名稱及位置均為自定義,沒有特殊規(guī)定)目錄下,如圖 6 所示。
圖6:Nexus 中央倉庫離線索引文件
2. 打開命令行窗口,跳轉(zhuǎn)到 index 目錄,執(zhí)行以下命令,解壓索引文件。
java -jar indexer-cli-5.1.1.jar -u nexus-maven-repository-index.gz -d indexer
解壓過程大約需要 10 分鐘左右,請耐心等待,解壓完成后,結(jié)果如圖 7 所示。
圖7:Nexus 中央倉庫離線索引解壓
3. 解壓完成后,在 index 中會生成一個(gè)名為 indexer 的目錄,該目錄中存放的就是中央倉庫離線索引文件,如圖 8 所示。
圖8:Nexus 離線索引文件
更新并驗(yàn)證索引
1. 將所有索引文件(不包含目錄)全部拷貝到“Nexus\sonatype-work\nexus\indexer\central-ctx”目錄中,如圖 9 所示。
圖9:Nexus 中央倉庫索引目錄
2. 重啟 Nexus,在倉庫列表中,選中 Central 代理倉庫,然后點(diǎn)擊 Browse Index 選項(xiàng)卡,結(jié)果如圖 10 所示。
圖10:Nexus 離線索引
3. 點(diǎn)擊 browse Remote 選項(xiàng)卡,結(jié)果如圖 11 所示。
圖11:Nexus 遠(yuǎn)程索引文章來源:http://www.zghlxwxcb.cn/news/detail-798379.html
4. 對比 Browse Index 和 Browse Remote 中的索引,若兩者完全一致,則表示離線索引更新成功。
需要注意的是,目前只有 Nexus 2.x 可以通過以上方式離線更新中央倉庫索引,Nexus 3.x 暫不支持該功能。若想在 Nexus
3.x 中使用離線索引,我們建議您先在 Nexus 2.x 中離線更新索引后,再將數(shù)據(jù)遷移到 Nexus 3.x 中。文章來源地址http://www.zghlxwxcb.cn/news/detail-798379.html
到了這里,關(guān)于【倉庫管理】搭建 Maven 私服之一--Nexus倉庫(Repository)管理軟件的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!