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