国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【倉庫管理】搭建 Maven 私服之一--Nexus倉庫(Repository)管理軟件

這篇具有很好參考價(jià)值的文章主要介紹了【倉庫管理】搭建 Maven 私服之一--Nexus倉庫(Repository)管理軟件。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Nexus是什么

Nexus 讀音:/?neks?s/是 Sonatype 公司發(fā)布的一款倉庫(Repository)管理軟件,常用來搭建 Maven 私服,所以也有人將 Nexus 稱為“Maven倉庫管理器”。

nexus repository,# maven,maven,apache,java

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)行下載,如下圖所示。

nexus repository,# maven,maven,apache,java

圖1:Nexus 2.x 下載頁面

2. 將下載 Nexus 安裝包解壓到本地磁盤,可獲得 nexus-2.14.20-02 和 sonatype-work 2 個(gè)目錄,如下圖。

nexus repository,# maven,maven,apache,java

圖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 中包含以下目錄及文件。

nexus repository,# maven,maven,apache,java

圖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 目錄,如下圖所示。

nexus repository,# maven,maven,apache,java

圖4:nexus-2.14.20-02\bin\jsw 目錄列表

5. 進(jìn)入 windows-x86-64 目錄后可以看到如下文件。

nexus repository,# maven,maven,apache,java

圖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ù)啟動失敗。

nexus repository,# maven,maven,apache,java

圖6:Nexus 首頁

8. 點(diǎn)擊首頁右上角的“Log In”按鈕,在登錄頁面輸入用戶名和密碼(默認(rèn)分別為:admin 和 admin123 ),最后點(diǎn)擊“Log In”按鈕登錄。

nexus repository,# maven,maven,apache,java

圖7:Nexus 登錄界面

9. 登錄成功后,結(jié)果如下圖。

nexus repository,# maven,maven,apache,java

圖8:Nexus 登錄成功

Nexus倉庫屬性和分類

Nexus 作為一款 Maven 倉庫管理器,倉庫(Repository)自然是 Nexus 最核心的概念。Nexus 中提供了許多倉庫概念,如代理倉庫、宿主倉庫以及倉庫組等。Nexus 為每一種倉庫都提供了豐富的配置參數(shù),方便我們根據(jù)自身需要進(jìn)行定制。

Nexus 倉庫屬性

點(diǎn)擊左邊導(dǎo)航欄中的 Repositories,可以看到 Nexus 自帶的幾個(gè)內(nèi)置倉庫,如下圖所示。

nexus repository,# maven,maven,apache,java

圖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ū)別。

nexus repository,# maven,maven,apache,java

圖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,如下圖。

nexus repository,# maven,maven,apache,java

圖1:Nexus 導(dǎo)航

2. 點(diǎn)擊 Nexus 倉庫列表上方的 Add… 按鈕,在下拉菜單中選擇 Hosted Repository,如下圖。

nexus repository,# maven,maven,apache,java

圖2:添加宿主倉庫

3. 在宿主倉庫配置界面,填寫對應(yīng)信息,然后點(diǎn)擊 Save 按鈕進(jìn)行保存,如下圖。

nexus repository,# maven,maven,apache,java

圖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)建完成,如下圖。

nexus repository,# maven,maven,apache,java

圖4:Nexus 倉庫列表(猛擊圖片,查看原圖)

重復(fù)以上步驟,再創(chuàng)建一個(gè)名稱為 bianchengbang_Release_hosted ,策略為 hosted 的宿主倉庫。

nexus repository,# maven,maven,apache,java

圖5:Nexus 倉庫列表-宿主倉庫(猛擊圖片,查看原圖)

創(chuàng)建 Nexus 代理倉庫

下面我們創(chuàng)建一個(gè)代理倉庫,用來下載和緩存中央倉庫的構(gòu)件,操作步驟如下。

點(diǎn)擊 Nexus 倉庫列表上方的 Add… 按鈕,在下拉菜單中選擇 Proxy Repository,如圖 5 所示。

nexus repository,# maven,maven,apache,java

圖5:添加代理倉庫

在代理倉庫配置界面,填寫對應(yīng)信息,然后點(diǎn)擊 Save 按鈕進(jìn)行保存,如圖 6 所示。

nexus repository,# maven,maven,apache,java

圖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,如下圖。

nexus repository,# maven,maven,apache,java

圖7:Nexus 添加倉庫組

在倉庫組配置界面,填寫對應(yīng)信息,并將 bianchengbang_central_proxy、bianchengbang_Release_hosted 和 bianchengbang_Snapshot_hosted 3 個(gè)倉庫添加到倉庫組中,最后點(diǎn)擊 Save 按鈕進(jìn)行保存,如下圖。

nexus repository,# maven,maven,apache,java

圖8:Nexus 倉庫組配置

查看 Nexus 倉庫列表,可以看到 bianchengbang_repository_group 倉庫組已經(jīng)創(chuàng)建完成,如下圖。

nexus repository,# maven,maven,apache,java

圖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è)倉庫的索引 ,如下圖所示。

nexus repository,# maven,maven,apache,java

圖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)閉索引下載。

nexus repository,# maven,maven,apache,java

圖2:遠(yuǎn)程索引下載

開啟索引下載功能后,點(diǎn)擊導(dǎo)航欄中 Scheduled Tasks 鏈接,查看調(diào)度任務(wù)列表。若 Nexus 正在下載索引,我們就能看到如圖 3 所示的任務(wù),其任務(wù)狀態(tài)為 Running。在索引下載完畢后,該任務(wù)就會消失。

nexus repository,# maven,maven,apache,java

圖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 所示。

nexus repository,# maven,maven,apache,java

圖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 所示。

nexus repository,# maven,maven,apache,java

圖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 所示。

nexus repository,# maven,maven,apache,java

圖6:Nexus 搜索結(jié)果詳情

點(diǎn)擊右側(cè)的 Artifact 選項(xiàng)卡,還能看到構(gòu)件的大小、上傳時(shí)間、最后修改時(shí)間、倉庫中的相對位置、校驗(yàn)和等信息,如圖 7 所示。

nexus repository,# maven,maven,apache,java

圖7:Nexus 搜索詳情頁 Artifact

除了關(guān)鍵字搜索外,Nexus 還提供了一些高級搜索功能,例如類名搜索、GAV 搜索以及“校驗(yàn)和”搜索。我們可以通過點(diǎn)擊搜索頁左上角的下拉菜單,選擇高級搜索功能。

nexus repository,# maven,maven,apache,java

圖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é)果如下。

nexus repository,# maven,maven,apache,java

圖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é)果如下。

nexus repository,# maven,maven,apache,java

圖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 步:

  1. 配置項(xiàng)目的 POM 文件。
  2. 在 setting.xml 中配置認(rèn)證信息。
  3. 使用 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 所示。

nexus repository,# maven,maven,apache,java

圖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 所示。

nexus repository,# maven,maven,apache,java

圖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 所示。

nexus repository,# maven,maven,apache,java

圖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 所示。

nexus repository,# maven,maven,apache,java

圖4:Nexus 第三方構(gòu)件手動上傳

4. 在倉庫列表中選中 3rd party 宿主倉庫,在下方的 Browse Index 選項(xiàng)卡中,可以看到構(gòu)件已經(jīng)被部署到該倉庫中,如圖 5 所示。

nexus repository,# maven,maven,apache,java

圖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)行下載。

nexus repository,# maven,maven,apache,java

圖1:Nexus 下載頁面

2. 將下載的安裝包解壓到本地,可獲得 nexus-3.30.0-01 和 sonatype-work 兩個(gè)目錄,如圖 2。

nexus repository,# maven,maven,apache,java

圖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 啟動完成。

nexus repository,# maven,maven,apache,java

圖3:Nexus 3 啟動完成

訪問 nexus 3.x

啟動完成后,在瀏覽器地址欄輸入 http://localhost:8081/,訪問 Nexus 界面,如圖 4 所示。

nexus repository,# maven,maven,apache,java

圖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 所示。

nexus repository,# maven,maven,apache,java

圖5:Nexus 3 登錄界面

登錄成功后,結(jié)果如圖 6 所示。

nexus repository,# maven,maven,apache,java

圖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 所示。

nexus repository,# maven,maven,apache,java

圖1:Nexus 中央倉庫離線索引下載列表

2. 瀏覽器訪問 http://mvnrepository.com/,搜索 Indexer CLI,選擇 Maven :: Indexer CLI,如圖 2 所示。

nexus repository,# maven,maven,apache,java

圖2:Nexus 索引生成器

3. 建議選擇 5.1.1 版本,如圖 3 所示。

nexus repository,# maven,maven,apache,java

圖3:選擇 Indexer CLI 版本

4. 在 Indexer CLI ? 5.1.1 版本詳情頁,點(diǎn)擊 View All,查看該版本包含的所有文件。

nexus repository,# maven,maven,apache,java

圖4:Nexus indexer-cli 5.1.1 詳情

5. 在文件列表中,點(diǎn)擊 indexer-cli-5.1.1.jar ,下載該文件,如圖 5 所示。

nexus repository,# maven,maven,apache,java

圖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 所示。

nexus repository,# maven,maven,apache,java

圖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 所示。

nexus repository,# maven,maven,apache,java

圖7:Nexus 中央倉庫離線索引解壓

3. 解壓完成后,在 index 中會生成一個(gè)名為 indexer 的目錄,該目錄中存放的就是中央倉庫離線索引文件,如圖 8 所示。

nexus repository,# maven,maven,apache,java

圖8:Nexus 離線索引文件

更新并驗(yàn)證索引

1. 將所有索引文件(不包含目錄)全部拷貝到“Nexus\sonatype-work\nexus\indexer\central-ctx”目錄中,如圖 9 所示。

nexus repository,# maven,maven,apache,java

圖9:Nexus 中央倉庫索引目錄

2. 重啟 Nexus,在倉庫列表中,選中 Central 代理倉庫,然后點(diǎn)擊 Browse Index 選項(xiàng)卡,結(jié)果如圖 10 所示。

nexus repository,# maven,maven,apache,java

圖10:Nexus 離線索引

3. 點(diǎn)擊 browse Remote 選項(xiàng)卡,結(jié)果如圖 11 所示。

nexus repository,# maven,maven,apache,java

圖11:Nexus 遠(yuǎn)程索引

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)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • linux 搭建 nexus maven私服

    linux 搭建 nexus maven私服

    目錄 環(huán)境: 下載 訪問百度網(wǎng)盤鏈接 官網(wǎng)下載 部署 : ?進(jìn)入目錄,創(chuàng)建文件夾,進(jìn)入文件夾 將安裝包放入nexus文件夾,并解壓?編輯 啟動 nexus,并查看狀態(tài).?編輯 更改 nexus 端口為7020,并重新啟動,訪問虛擬機(jī)7020 更換賬號密碼,瀏覽器點(diǎn)擊 sign in看到提示密碼,在/usr/local/n

    2024年02月12日
    瀏覽(13)
  • 【Maven】常用命令、插件管理、私服nexus

    【Maven】常用命令、插件管理、私服nexus

    ?? Maven 提供了一系列常用命令,用于構(gòu)建、測試和管理項(xiàng)目。以下是一些常用的 Maven 命令示例: ?? mvn clean : 清除項(xiàng)目中生成的輸出目錄(如 target 目錄)。 ?? mvn compile : 編譯項(xiàng)目源代碼。 ?? mvn test : 運(yùn)行項(xiàng)目的單元測試。 ?? mvn package : 打包項(xiàng)目,生成可發(fā)布的

    2024年02月14日
    瀏覽(44)
  • Nexus私服,使用Maven上傳到倉庫時(shí)提示xx/metadata.xml響應(yīng)碼 502

    ? ? ? ? 寶塔、使用寶塔環(huán)境安裝的Nginx、使用Nginx轉(zhuǎn)發(fā)到Nexus。 ????Nginx轉(zhuǎn)發(fā)時(shí),Nexus響應(yīng)錯誤碼為404,但是Nginx返回給客戶端的響應(yīng)碼是502。 ?? ?* 如果響應(yīng)碼是404則表示沒有,Maven會按照服務(wù)器端沒有依賴庫處理,但是返回的502表示服務(wù)器錯誤maven則不再繼續(xù)向后處理。 ?? ?

    2024年02月21日
    瀏覽(18)
  • 【docker】centos 使用 Nexus Repository 搭建私有倉庫

    【docker】centos 使用 Nexus Repository 搭建私有倉庫

    Nexus Repository 是一種流行的軟件倉庫管理工具,它可以幫助您搭建私有倉庫,以便在內(nèi)部網(wǎng)絡(luò)或私有云環(huán)境中存儲、管理和分發(fā)各種軟件包和組件。 它常被用于搭建Maven的鏡像倉庫。本文演示如何用Nexus Repository搭建docker 私有倉庫。 使用Nexus Repository搭建本地Docker倉庫的步驟如

    2024年01月23日
    瀏覽(20)
  • Docker本地部署Nexus Maven私服并實(shí)現(xiàn)遠(yuǎn)程訪問管理界面

    Docker本地部署Nexus Maven私服并實(shí)現(xiàn)遠(yuǎn)程訪問管理界面

    本文主要介紹如何在Linux中使用Docker一鍵部署Nexus Maven私有倉庫工具并結(jié)合Cpolar內(nèi)網(wǎng)穿透實(shí)現(xiàn)遠(yuǎn)程訪問Nexus進(jìn)行管理。 Nexus是一個(gè)倉庫管理工具,用于管理和組織軟件構(gòu)建過程中的依賴項(xiàng)和構(gòu)件。它與Maven密切相關(guān),可以作為Maven倉庫的服務(wù)器。Nexus提供了一個(gè)集中式的位置,用

    2024年01月19日
    瀏覽(21)
  • 新手入門Win-Server下Maven私服nexus的搭建、使用與配置,這一篇就夠了

    新手入門Win-Server下Maven私服nexus的搭建、使用與配置,這一篇就夠了

    近期項(xiàng)目上有需要搭建一個(gè)maven私服倉庫,于是自己試著弄了一下,踩了一些坑,特此想發(fā)布一篇教程,并提供資源,方便大家遇到類似的情況時(shí)能夠快速完成工作; 關(guān)于nexus的介紹,這里不多廢話了,感興趣的可以去官網(wǎng)自己查看。 一、先要去下載nexus安裝包 https://www.son

    2024年02月02日
    瀏覽(29)
  • nexus搭建maven私有倉庫

    nexus搭建maven私有倉庫

    Nexus 在企業(yè)開發(fā)中還是比較常用的私有倉庫管理工具,一般把公司內(nèi)部的Maven jar 包或npm包上傳到倉庫中,有效的對包文件進(jìn)行管理。 Nexus 至少需要 2G 以上的內(nèi)存 安裝nexus之前首先安裝配置好 JDK 環(huán)境 和 Maven環(huán)境 1、Linux環(huán)境安裝openJDK 2、Centos7.3安裝maven并配置加速鏡像源 ne

    2024年02月12日
    瀏覽(17)
  • Maven私有倉庫搭建與使用【nexus的配置與使用】【W(wǎng)indows】

    Maven私有倉庫搭建與使用【nexus的配置與使用】【W(wǎng)indows】

    在公司開發(fā)測試過程中,內(nèi)網(wǎng)團(tuán)隊(duì)使用一個(gè)服務(wù)來節(jié)省外網(wǎng)寬帶以及緩存Maven Respository中沒有的jar包 允許上傳和下載私有庫,并且不被外部訪問,安全穩(wěn)定 官網(wǎng)下載地址,但是速度很慢,可以使用以下鏈接獲?。禾砑渔溄用枋?解壓好下載的nexus壓縮包,會有以下兩個(gè)文件:

    2023年04月08日
    瀏覽(27)
  • Maven發(fā)布項(xiàng)目到Nexus私服

    Maven發(fā)布項(xiàng)目到Nexus私服

    在項(xiàng)目pom.xml中文件中的倉庫配置,Nexus私服如何搭建在這里不介紹了可自行百度。 在maven的settings.xml文件中添加服務(wù)器配置,倉庫id、用戶名和密碼,id需要與上面pom.xml中的倉庫id一致,兩個(gè)密碼都是nexus登錄密碼。 再執(zhí)行mvn deploy,也可以直接使用idea執(zhí)行。

    2024年02月14日
    瀏覽(16)
  • docker安裝Nexus,maven私服

    docker安裝Nexus,maven私服

    nexus作為私服的maven倉庫,在企業(yè)級應(yīng)用中,提供了依賴來源的穩(wěn)定性,為構(gòu)建龐大的微服務(wù)體系,打下基礎(chǔ) 這里如果不設(shè)置,nexus在容器里會創(chuàng)建不了文件鎖,導(dǎo)致異常 -e INSTALL4J_ADD_VM_PARAMS=“-Xms512m -Xmx512m” ,留意這條指令,主要用于限制內(nèi)存的使用 通過GPT可以簡單的將

    2024年04月08日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包