Maven 私服搭建
在本節(jié)中,我們來介紹一下如何使用 Nexus 來搭建我們自己的 Maven 私服。在之前的章節(jié)中,我們已經(jīng)介紹過關(guān)于 Maven 倉庫的分類了,就像下圖張展示的那樣子,今天,我們就重點(diǎn)的來講一下關(guān)于私服這部分內(nèi)容。
1. Nexus 簡介與安裝
1.1 Nexus 簡介
Nexus 的創(chuàng)始人是 Tamas Cservenak。在大約 2005 年的時(shí)候,Tamas 開始開發(fā)了一個(gè) Proximity 系統(tǒng),開發(fā)這個(gè)系統(tǒng)的原因是當(dāng)時(shí)的電信公司提供的 ADSL 網(wǎng)絡(luò)的傳輸速度過慢。Proximity 系統(tǒng)的目的也很明確,代理和緩存中央倉庫中的構(gòu)件,在 Maven 需要下載構(gòu)件的時(shí)候,不需要經(jīng)過糟糕的 ADSL 網(wǎng)絡(luò)。后來,到了 2007 年的時(shí)候,Sonatype 團(tuán)隊(duì)邀請了 Tamas 創(chuàng)建了 Nexus 項(xiàng)目。
我們可以發(fā)現(xiàn)這又是一段類似 git 的產(chǎn)生的歷史。大神們總是用這種方式,來改變著我們的歷史。
1.2 Nexus 安裝
接下來,我們來安裝 Nexus 。首先,我們可以去 Sonatype 的官網(wǎng)上下載對(duì)應(yīng)的 Nexus 版本。不過這里還是要吐槽一下這個(gè)地址的訪問速度非常慢。這里,我們使用的是nexus-2.11.2-03-bundle.tar.gz
版本。
-
首先,我們將安裝包上傳到服務(wù)器的對(duì)應(yīng)目錄中;
-
我們將安裝包進(jìn)行解壓,執(zhí)行命令
tar -xvf nexus-2.11.2-03-bundle.tar.gz
,解壓后,對(duì) nexus-2.11.2-03 目錄進(jìn)行重命名mv nexus-2.11.2-03 nexus
;
-
編輯環(huán)境變量,
vi /etc/profile
,在文件的最后,根據(jù)自己服務(wù)器的情況,添加如下的配置;
-
進(jìn)入到 bin 目錄中,
cd /usr/local/src/nexus/bin
; -
在 bin 目錄中,有 Nexus 的可執(zhí)行文件,我們來執(zhí)行
nohup ./nexus start &
,來啟動(dòng) Nexus,啟動(dòng)成功后,在瀏覽器中,輸入http://ip:port/nexus
可以瀏覽私服的網(wǎng)址;
至此,我們就安裝好了 Nexus。
2. Nexus 配置與使用
2.1 Nexus 配置
接下來,我們來介紹如何配置 Nexus,來讓其幫我們代理 Maven 的中央倉庫。
-
首先,我們登陸 Nexus ,默認(rèn)的密碼是
admin/admin123
,登陸成功后,我們可以看到左側(cè)出現(xiàn)更多的功能;
-
如下圖操作,我們來添加代理倉庫;
-
在下方的配置頁面,如下圖進(jìn)行操作;
-
創(chuàng)建好代理倉庫之后,還需要配置一下 Public Repositories;
-
在配置好 Public Repositories 之后,我們更新一下該倉庫的索引;
-
更新索引可能會(huì)需要一段時(shí)間,等到更新好之后,我們可以 Nexus 中搜索想要的構(gòu)件,這時(shí)候說明 Nexus 的索引已經(jīng)更新完成;
2.2 Nexus 使用
在配置好 Nexus 之后,我們要在項(xiàng)目中使用私服要如何使用呢?答案是,和使用其他的倉庫沒有太大區(qū)別。接下來,我們來具體介紹一下如何在項(xiàng)目中使用。
-
打開 Maven 的 setting.xml 文件,將其中的 mirrors 節(jié)點(diǎn)和 profiles 節(jié)點(diǎn)改為如下配置;
<mirrors> <mirror> <id>mic-maven</id> <mirrorOf>*</mirrorOf> <name>mic maven</name> <url>http://ip:port/nexus/content/groups/public/</url> </mirror> </mirrors> <profiles> <profile> <id>maven profile</id> <activation> <jdk>1.8</jdk> <activeByDefault>true</activeByDefault> </activation> <repositories> <repository> <id>chenyao-central</id> <name>chenyao maven</name> <url>http://ip:port/nexus/content/groups/public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>chenyao-central</id> <name>chenyao maven</name> <url>http://ip:port/nexus/content/groups/public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </pluginRepository> </pluginRepositories> </profile> </profiles> <activeProfiles> <activeProfile>maven profile</activeProfile> </activeProfiles>
-
在 setting.xml 文件中配置好 Nexus 之后,我們可以在項(xiàng)目中引入一個(gè) jar 包來試一下,如果能夠成功的將構(gòu)件下載到本地,就說明我們的配置是正確的。
介于我們在團(tuán)隊(duì)內(nèi)部使用的時(shí)候,還需要將項(xiàng)目的構(gòu)建到 Nexus 中,所以,我們還需要進(jìn)行單獨(dú)的配置。
-
首先,我們在項(xiàng)目的 pom.xml 文件中,添加 distributionManagement 節(jié)點(diǎn),用于控制分發(fā)管理;
<distributionManagement> <repository> <id>mic-release</id> <name>mic maven</name> <url>http://ip:port/nexus/content/repositories/releases/</url> </repository> <snapshotRepository> <id>mic-snapshot</id> <name>mic maven</name> <url>http://ip:port/nexus/content/repositories/snapshots/</url> </snapshotRepository> </distributionManagement>
-
由于 Nexus 需要登陸才能使用,所以需要在 setting.xml 文件中配置服務(wù)器的登陸信息;
<servers> <server> <id>mic-release</id> <username>admin</username> <password>admin123</password> </server> <server> <id>mic-snapshot</id> <username>admin</username> <password>admin123</password> </server> </servers>
-
配置完成后,我們在
mall-order
目錄下執(zhí)行mvn clean deploy
; -
執(zhí)行完之后,我們?nèi)?Nexus 中根據(jù)坐標(biāo)可以查到這個(gè)構(gòu)件。
至此,我們已經(jīng)能夠讓 Nexus 來代理中央倉庫,并且將我們自己的項(xiàng)目構(gòu)建到私服中去,來提供給其他的項(xiàng)目中使用。
3. 小結(jié)
在本節(jié)中,我們首先介紹了什么是 Nexus ,然后介紹了 Nexus 在服務(wù)器中的安裝與配置方式,最后,我們將私服配置到我們的項(xiàng)目中去,讓其供我們的項(xiàng)目使用。
4. FAQ
4.1 版本選擇
本文中,我們選擇的是 Nexus 的 2.x 版本,之所以這樣做是因?yàn)椋?.x 版本建議 CPU 核心數(shù)為 4 核,但是,我的服務(wù)器只是一個(gè)雙核的,所以,被迫選擇了 2.x 版本,3.x 版本和 2.x 版本理念上沒有太多區(qū)別,只是具體配置操作可能會(huì)有差異。
4.2 RUN_AS_USER
Nexus 是不建議使用 root 用戶來啟動(dòng)的。這里我們有兩個(gè)選擇,一個(gè)是單獨(dú)創(chuàng)建一個(gè)用戶,來提供 Nexus 使用(建議);另一種就是像本節(jié)中的配置,在環(huán)境變量中增加 RUN_AS_USER 配置,來強(qiáng)制使用 root 用戶啟動(dòng)。