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