讀古今文學網 > Maven實戰 > 9.4 Nexus的索引與構件搜索 >

9.4 Nexus的索引與構件搜索

既然Nexus能夠維護宿主倉庫並代理緩存遠程倉庫(如Maven中央庫),那麼一個簡單的需求就自然浮現出來了,這就是搜索。Maven中央庫有幾十萬構件供用戶使用,但有時我們往往僅僅知道某個關鍵字,如Ehcache,而不知道其確切的Maven坐標。Nexus通過維護倉庫的索引來提供搜索功能,能在很大程度上方便Maven用戶定位構件坐標。

6.8.1節介紹了Sonatype提供的在線免費搜索服務,其實用戶可以很方便地自己維護一個Nexus實例,並提供搜索服務。

為了能夠搜索Maven中央庫,首先需要設置Nexus中的Maven Central代理倉庫下載遠程索引,如圖9-9所示。需要注意的是,默認這個配置的值是關閉的。此外,由於中央庫的內容比較多,因此其索引文件比較大,Nexus下載該文件也需要比較長的時間,讀者還需要耐心等待。

可以想像到,Nexus在後台運行了一個任務來下載中央倉庫的索引,幸運的是,用戶可以通過界面直接觀察這一任務的狀態。單擊界面左邊導航欄中的Scheduled Tasks鏈接後,用戶就能在界面的右邊看到系統的調度任務,如果Nexus正在下載中央倉庫的索引,用戶就能看到圖9-10所示的一個任務,其狀態為RUNNING。在索引下載完畢之後,該任務就會消失。

有了索引,用戶即可搜索Maven構件了。Nexus界面左邊導航欄有一個快捷搜索框,在其中輸入關鍵字後,單擊搜索按鈕就能快速得到搜索結果,如圖9-11所示。

圖9-9 為Maven Central倉庫開啟遠程索引下載

圖9-10 下載Maven中央倉庫索引的後台任務

圖9-11 在Nexus中快速搜索構件

該例使用了ehcache關鍵字進行搜索,因此得到了大量與ehcache相關的結果,結果中的每一行都表示了一類構件,信息包括GroupId、ArtifactId、最新版本以及最新版本的相關文件下載等。單擊其中的某一行,界面的下端會浮出一個更具體的構件信息面板,如圖9-12所示。

圖9-12 Nexus的構件信息面板

該面板除了顯示構件的坐標,還包含了一段XML依賴聲明,用戶可以直接複製粘貼到項目的POM中。此外,用戶還能從該面板獲知構件在倉庫中的相對位置。單擊Artifact Information還能看到文件具體的大小、更新時間、SHA1和MD5校驗和以及下載鏈接。除了簡單的關鍵字搜索,Nexus還提供了GAV搜索、類名搜索和校驗和搜索等功能,用戶可以單擊搜索頁面左上角的下拉菜單選擇高級搜索功能:

·GAV搜索(GAV Search)允許用戶通過設置GroupId、ArtifactId和Version等信息來進行更有針對性的搜索。

·類名搜索(Classname Search)允許用戶搜索包含某個Java類的構件。

·校驗和搜索(Checksum Search)允許用戶直接使用構件的校驗和來搜索該構件。

圖9-11所示的結果中包含了各種坐標的結果。基於該結果的信息,筆者進一步確定了自己需要的構件的GroupId和ArtifactId,它們分別為net.sf.ehcache和ehcache。這時就可以單擊對應的Show All Versions轉到GAV搜索功能來縮小搜索範圍,如圖9-13所示。

圖9-13 在Nexus中使用GAV搜索構件

當然,用戶也可以自己手動輸入GroupId、ArtifactId等信息來進行GAV搜索。

有了中央倉庫的索引,用戶不僅能夠搜索構件,還能夠直接瀏覽中央倉庫的內容。這便是Nexus的索引瀏覽功能。在Repositories頁面中,選擇Browse Index選項卡,就能看到中央倉庫內容的樹形結構,如圖9-14所示。

圖9-14 Nexus的索引瀏覽

以上的搜索及瀏覽功能都是基於Nexus索引而實現的,確切地應該稱之為nexus-indexer。Nexus能夠遍歷一個Maven倉庫所有的內容,搜集它們的坐標、校驗和及所含的Java類信息,然後以nexus-indexer的形式保存起來。中央倉庫維護了這樣的一個nexus-indexer,因此本地的Nexus下載到這個索引之後,就能在此基礎上提供搜索和瀏覽等服務。需要注意的是,不是任何一個公共倉庫都提供nexus-indexer,對於那些不提供索引的倉庫來說,我們就無法對其進行搜索。

除了下載使用遠程倉庫的索引,我們也能為宿主倉庫和代理倉庫建立索引。只需要在倉庫上右擊,從彈出的快捷菜單中選擇ReIndex即可,如圖9-15所示。待索引編纂任務完成之後,就能搜索該倉庫所包含的構件。

圖9-15 為Nexus倉庫編纂索引

對於宿主倉庫來說,ReIndex任務會掃瞄該倉庫包含的所有構件建立索引。對於代理倉庫來說,ReIndex任務會掃瞄所有緩存的構件建立索引,如果遠程倉庫也有索引,則下載後與本地的索引合併。對於倉庫組來說,ReIndex任務會合併其包含的所有倉庫的索引。