使用Nexus2.x為Maven3.x搭建私服構件倉庫
前言
在筆者的前一篇博文《Use Maven3.x》中,筆者詳細的講解了如何通過使用Maven3.x來構建及管理你的專案。其中筆者提到過些關於私服的概念,但卻沒有明確的對私服做出詳細的闡述,彆著急,這便是你看筆者本篇博文的目的。
不知大家是否還有印象,Maven的本地倉庫中所包含的構件全部來源於Maven的中央倉庫,這個中央倉庫是針對全世界的,也就是說全世界基於Mavem的專案都可以共同使用這個對外開放的中央倉庫。
本篇博文筆者將詳細針對Maven的本地倉庫、私服倉庫及中央倉庫進行詳細的講解,但是在開始講解之前,筆者希望大家先弄明白這3個倉庫之間彼此的依賴關係。
在正式開始講解本章之前,希望大家首先耐下心來聽筆者講解一個故事
人物:小張、媽媽、經銷商(小偉)、生產商(小紅);
情節:小張買鹽;
故事內容:
有一天小張的媽媽看見家裡沒有鹽了,於是就叫小張去樓下的小賣部去買一包鹽,小張拿著3.5元錢高高興興的下樓了,但是來到經銷商小偉的店裡卻被告知鹽已經賣完了,這是小張心情有些低落,但小偉告訴小張,你不要著急,我等下便去生產商小紅那裡去批發一箱回來,小張一聽頓時來勁了,大約等了半個小時後(筆者不知道小張媽媽油鍋裡的菜炒得如何了),生產商小紅騎著電動車,拉著一箱鹽來到了經銷商小偉的店裡,小偉對小張說,拿去吧,鹽來了。最後小張拿著鹽高高興興的回家去了。
上述故事雖然無聊但卻和咱們本章的內容息息相關,為什麼這麼說呢?注意看,假設咱們現在要使用Maven來構建咱們的專案,Maven首先會去哪裡尋找與專案相關的構件呢?沒錯就是本地倉庫中,但本地倉庫中並沒有咱們需要的構件時,Maven就會選擇去私服倉庫尋找,假設私服倉庫也沒有咱們專案需要的構件時,則會去請求中央倉庫,最後逐一返回(注意:並不是由中央倉庫直接返回給本地倉庫
或許有很多朋友有一個共同的疑問,為什麼需要使用私服倉庫呢?就算沒有私服倉庫,Maven不是也能和中央倉庫建立關聯,然後下載所需構件嗎?這豈不是多此一舉?
為什麼要為自己的Maven專案搭建私服倉庫呢?原因有如下3點:
1、我們應該儘可能的降低對Maven中央倉庫的負載;
2、我們需要統一管理並規範我們專案所需的構件版本;
3、如果你所在的企業並不允許使用外網,那麼你的專案將變得異常被動;
4、我們在很多時候需要節約那狗血的頻寬流量;
請大家仔細觀察Maven本地倉庫、私服倉庫及中央倉庫之間的關聯流程圖:
一、下載與安裝Nexus
想為Maven搭建私服,我們可以選擇使用Nexus工具,該工具目前的最新版本為2.2.0(本文將採用最新版本),其下載地址為:
當我們成功下載好Nexus後,可以將其解壓。在nexus-2.2-01-bundle\nexus-2.2-01\bin\jsw\windows-x86-32目錄中我們找到console-nexus.bat檔案(你可以選擇對應的操作平臺的啟動檔案),雙擊即可啟動Nexus:
通過上圖我們可以發現,Nexus伺服器預設的訪問埠為8081(如果你需要修改預設埠,你可以找到\nexus-2.2-01-bundle\nexus-2.2-01\conf目錄下的nexus.properties檔案,指定application-port屬性為你的指定埠即可),接下來我們可以在瀏覽器中輸入http://127.0.0.1:8081/nexus/檢視Nexus是否成功啟動:
通過上圖我們可以發現我們已經成功的啟動了Nexus,那麼接下來要做的事情就更有意思了,在後續章節中筆者會陸續講到應該如何使用Nexus工具來配置和管理咱們的私服倉庫。
二、倉庫型別
在上一章節中,筆者講解了如何下載與安裝Nexus工具。那麼本章節咱麼來看看如何使用Nexus工具配置和管理私服倉庫。當然在使用Nexus之前你是需要登入的,預設賬號密碼為:
account:admin;
password:admin123;
當成功登入後,你可以單擊 Repositories屬性看到如下頁面:
由於admin這個賬號是屬於Administrator許可權的,你也可以通過單擊Security屬性進行賬戶的配置:
Nexus的倉庫型別一共有4種,每一種倉庫型別均對應有不同的操作方式:
1、group: 倉庫組;
2、hosted:宿主;
3、proxy:代理;
4、virtual:虛擬;
來吧,咱們先談談倉庫組這個概念,一個倉庫組類似一個倉庫集合,它和倉庫之間是一對多的關係,也就是說一個倉庫組可以允許包含多個倉庫,Nexus倉庫用例圖如下:
在咱們弄明白倉庫組的作用後,咱們接著來看宿主倉庫是幹什麼的。其實所謂宿主倉庫可以理解為自定義倉庫,用於存放一些在中央倉庫無法下載的構件,比如自定義構件(你可以手動將自定義構件上傳至hosted中)。
代理倉庫起到的作用是代理作用,假設本地倉庫向私服進行請求時,首先會去私服倉庫的本地路徑中尋找構件,如果沒有找到則會從中央倉庫進行下載。
虛擬倉庫省略...
三、使用Nexus管理私服倉庫
在瞭解Nexus的4種倉庫型別後,咱們接下來要做的事情就是使用Nexus工具來管理咱們的私服倉庫。先來看看Nexus為我們提供的一些預設倉庫:
從上圖我們可以看出Nexus預設為我們定義了1個倉庫組,7個倉庫。當中最主要的幾個倉庫為:
3rd party(宿主倉庫):用於存放一些在中央倉庫無法下載的構件倉庫;
Apache Snapshots(代理倉庫):代理ApacheMaven倉庫快照版本的構件倉庫;
Central(代理倉庫):代理Maven中央倉庫中釋出版本構件的倉庫;
當然你可以根據專案需要新建倉庫組及倉庫,但在建立這些私有的倉庫之前,咱們還是先來看看如何使用Nexus為咱們提供的預設構件倉庫(其實很多時候你真沒必要去新建倉庫)。
選擇Public Repositories分組,單擊configuration選項,你可以為倉庫組新增對應的倉庫:
單擊Save按鈕儲存即可配置完成。這裡有一點需要提醒大家的是,倉庫的新增順序直接決定了構件的下載順序,換句話來說我們應該把需要從中央倉庫或者其他遠端倉庫下載構件的代理倉庫新增在最後。
當咱們成功將指定的倉庫集合新增進倉庫組後,接下來我們來為3rd party(宿主倉庫)上傳自定義構件,所謂自定義構件指的是無法從Maven的中央倉庫進行下載的構建。
筆者在此選用的是最簡單方便的手動上傳構件(當然上傳構件至宿主倉庫還有一些方式,但筆者還是側重於最簡便的方式)。
單擊3rd party(宿主倉庫)的Artifact Upload選項,我們首先來上傳一個基於Maven專案的自定義構件:
最後別忘記了新增構件:
如果你的構件不是基於Maven的呢?那麼你可以選擇GAV Parameters屬性:
其實按照上述步驟,咱們就已經成功將自定義構件上傳至宿主倉庫中了。那麼接下來我們是不是應該讓Maven的本地倉庫來連線私服倉庫試試構件能否正常下載呢?
來吧,找到你本地Maven的setting.xml檔案,我們需要修改如下幾個屬性來指定Maven下載構件的地址為私服倉庫路徑而非中央倉庫。
配置倉庫屬性:
<profiles> <profile> <id>myprofile</id> <repositories> <repository> <id>central</id> <url>http://central</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>central</id> <url>http://central</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </pluginRepository> </pluginRepositories> </profile> </profiles>
啟用profile:
<activeProfiles> <activeProfile>myprofile</activeProfile> </activeProfiles>
配置映象:
<mirrors> <mirror> <id>nexus</id> <url>倉庫組或者倉庫路徑</url> <mirrorOf>*</mirrorOf> </mirror> </mirrors>
如果你和筆者一樣使用的是spring Tool Suite(基於eclipse二次開發的IDE),那麼你需要將m2e自帶的setting.xml檔案路徑更改為Maven本地的setting.xml檔案路徑。
替換完setting.xml配置檔案後,我們開啟選單欄的Show View選擇Meven Repositories視窗檢視Maven下載構件倉庫的位置:
通過下圖我們可以看見,我們已經成功將Maven的構件下載路徑從中央倉庫改為了私服倉庫: