我們知道,Maven 中央倉(cāng)庫(kù)為用戶提供了多達(dá)數(shù)十萬(wàn)構(gòu)件,而 Nexus 可以代理所有的遠(yuǎn)程倉(cāng)庫(kù)(包括 Maven 中央倉(cāng)庫(kù)),可見(jiàn) Nexus 倉(cāng)庫(kù)中構(gòu)件的數(shù)量相當(dāng)龐大。用戶想要在這么多構(gòu)件中,快速的查找自己所需的構(gòu)件,一個(gè)最直接有效的方式就是:搜索。
Nexus 作為一款成熟的倉(cāng)庫(kù)管理工具,它通過(guò)維護(hù)倉(cāng)庫(kù)的索引提供了構(gòu)件搜索功能,以便幫助用戶方便快速地找到所需構(gòu)件。
本節(jié)我們將詳細(xì)為您介紹 Nexus 索引以及構(gòu)件搜索功能。
Nexus 能夠遍歷倉(cāng)庫(kù)的所有內(nèi)容,搜集它們的坐標(biāo),校驗(yàn)和以及所包含的 Java 類等信息,然后以索引( nexus-indexer) 的形式保存起來(lái)。Nexus 索引保存在 Nexus 安裝目錄下 \sonatype-work\nexus\indexer 目錄中,該目錄下每個(gè)子目錄都代表 Nexus 中的一個(gè)倉(cāng)庫(kù),用來(lái)存放各個(gè)倉(cāng)庫(kù)的索引 ,如下圖所示。
大多數(shù)的遠(yuǎn)程公共倉(cāng)庫(kù)(例如,中央倉(cāng)庫(kù))都維護(hù)了一個(gè)這樣的索引,因此本地的 Nexus 在下載到這個(gè)索引后,就能在此基礎(chǔ)上為用戶提供構(gòu)件搜索和瀏覽等服務(wù)。需要注意的是,并不是所有的公共倉(cāng)庫(kù)都提供了索引 ,對(duì)于那些沒(méi)有提供索引的倉(cāng)庫(kù)來(lái)說(shuō),我們是無(wú)法對(duì)其進(jìn)行搜索的。
Nexus 索引下載功能默認(rèn)是關(guān)閉的,如果想在 Nexus 中搜索遠(yuǎn)程倉(cāng)庫(kù)中的構(gòu)件,就需要先開(kāi)啟索引下載功能。
以 bianchengbang_central_proxy 代理倉(cāng)庫(kù)(代理 Maven 中央倉(cāng)庫(kù))為例,在圖 2 所示的位置就可以控制它的索引下載功能,true 表示開(kāi)啟索引下載,false 表示關(guān)閉索引下載。
開(kāi)啟索引下載功能后,點(diǎn)擊導(dǎo)航欄中 Scheduled Tasks 鏈接,查看調(diào)度任務(wù)列表。若 Nexus 正在下載索引,我們就能看到如圖 3 所示的任務(wù),其任務(wù)狀態(tài)為 Running。在索引下載完畢后,該任務(wù)就會(huì)消失。
由于 Maven 中央倉(cāng)庫(kù)的內(nèi)容較多,其索引文件比較大,因此 Nexus 下載該文件所需的時(shí)間較長(zhǎng),需要我們耐心等待。
索引下載完成后,點(diǎn)擊倉(cāng)庫(kù)列表中的 bianchengbang_central_proxy 代理倉(cāng)庫(kù),然后在列表下方選擇 Browse Index 選項(xiàng)卡,我們可以看到該倉(cāng)庫(kù)內(nèi)容的樹形結(jié)構(gòu),如圖 4 所示。
Nexus 通過(guò)維護(hù)索引,為用戶提供了關(guān)鍵字搜索、類名搜索、坐標(biāo)搜索等多種搜索功能,通過(guò)這些功能,頁(yè)面中能夠清晰地展示出結(jié)果構(gòu)件的坐標(biāo)以及所屬倉(cāng)庫(kù)。用戶可以直接下載相應(yīng)的構(gòu)件,也可以直接復(fù)制構(gòu)件的 XML 依賴聲明,到項(xiàng)目中使用。
在 Nexus 界面左邊導(dǎo)航欄中有一個(gè)搜索框,在搜索框內(nèi)輸入所需構(gòu)件的關(guān)鍵字,單擊搜索按鈕就能快速得到搜索結(jié)果,如圖 5 所示。
搜索結(jié)果頁(yè)中的每一行代表一類構(gòu)件,其中包含了 Group、Artifact、版本、流行版本、以及下載鏈接等信息。點(diǎn)擊其中某一行,下方就會(huì)出現(xiàn)該構(gòu)件的詳細(xì)信息,其中不但包含構(gòu)件的坐標(biāo)等基本信息,還包含一段 XML 依賴聲明,我們可以將這段 XML 依賴聲明直接復(fù)制到項(xiàng)目的 POM 中使用,如圖 6 所示。
點(diǎn)擊右側(cè)的 Artifact 選項(xiàng)卡,還能看到構(gòu)件的大小、上傳時(shí)間、最后修改時(shí)間、倉(cāng)庫(kù)中的相對(duì)位置、校驗(yàn)和等信息,如圖 7 所示。
除了關(guān)鍵字搜索外,Nexus 還提供了一些高級(jí)搜索功能,例如類名搜索、GAV 搜索以及“校驗(yàn)和”搜索。我們可以通過(guò)點(diǎn)擊搜索頁(yè)左上角的下拉菜單,選擇高級(jí)搜索功能。
Nexus 還具有以下高級(jí)搜索功能:
類名搜索(Keyword Search):搜索包含某個(gè) Java 類的構(gòu)件。
GAV 搜索(GAV Search):通過(guò)設(shè)置 Group、Artifact、版本等信息進(jìn)行搜索。
校驗(yàn)和搜索(Checksum Search):通過(guò)使用“校驗(yàn)和”搜索構(gòu)件。
這些搜索功能的使用都十分的簡(jiǎn)單,我們可以根據(jù)自己的需求選擇合適的搜索功能。