為什么要搭建maven私有庫?
有位博主在2008年時這樣寫道:
如果沒有私服,我們所需的所有構件都需要通過maven的中央倉庫和第三方的Maven倉庫下載到本地,而一個團隊中的所有人都重復的從maven倉庫下載構件無疑加大了倉庫的負載和浪費了外網帶寬,如果網速慢的話,還會影響項目的進程。很多情況下項目的開發都是在內網進行的,連接不到maven倉庫怎么辦呢?開發的公共構件怎么讓其它項目使用?這個時候我們不得不為自己的團隊搭建屬于自己的maven私服,這樣既節省了網絡帶寬也會加速項目搭建的進程,當然前提條件就是你的私服中擁有項目所需的所有構件。
總之,在本地構建私服的好處有:
1)加速構建;
2)節省帶寬;
3)節省中央maven倉庫的帶寬;
4)穩定(應付一旦中央服務器出問題的情況);
5)控制和審計;
6)能夠部署第三方構件;
7)可以建立本地內部倉庫;
8)可以建立公共倉庫
但對于現在(2018年)的帶寬和網絡情況來說,上面的好處已經不那么明顯了。
結合本人maven使用經驗來回答:
在多人協同開發時,開發人員開發的項目jar包如果還是在開發人員本地電腦的maven庫上是不合理的,需要一個可以大家都能訪問的maven庫。
這個庫是maven公共庫嗎?如第三方的阿里巴巴maven庫?maven中央庫?
顯然是不可以的,只要是商業項目,誰愿意把自己的代碼maven install 到別人的maven庫里,這樣別人就知道你的代碼了,相當于開源一樣了,除非做開源項目。
還有項目有時候會加入購買的第三方商業工具,這些工具的jar包也要放到一個maven倉庫里。
為什么要用Sonatype Nexus做maven的私有倉庫?
原因很簡單,Sonatype Nexus就是倉庫管理工具,而且穩定好用。
Sonatype Nexus2.x支持的倉庫:
Sonatype Nexus3.x支持的倉庫:
Sonatype Nexus官網:http://www.sonatype.org/nexus/
本文以2.x版本,因為maven倉庫的支持夠了。
2、解壓
# mkdir nexus ?
# tar -zxvf nexus-2.11.2-03-bundle.tar.gz -C nexus ?
# cd nexus ?
# ls ?
nexus-2.11.2-03 ?sonatype-work ?
(一個nexus 服務,一個私有庫目錄) ?


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
?給用戶配置郵箱地址,方便忘記密碼時找回,和接受通知
?
3.x的版本更新太大了,安裝文件目錄結構都變了。
搭建過程
1、下載Nexus 2.x版本2、解壓
# mkdir nexus ?
# tar -zxvf nexus-2.11.2-03-bundle.tar.gz -C nexus ?
# cd nexus ?
# ls ?
nexus-2.11.2-03 ?sonatype-work ?
(一個nexus 服務,一個私有庫目錄) ?
3、編輯Nexus 的nexus.properties 文件,配置端口和work 目錄信息
# cd nexus-2.11.2-03 ?
# ls ?
bin ?conf ?lib ?LICENSE.txt ?logs ?nexus ?NOTICE.txt ?tmp ?
查看lib下的jar包,發現是基于jetty 運行 ?
# cd nexus-2.11.2-03 ?
# ls ?
bin ?conf ?lib ?LICENSE.txt ?logs ?nexus ?NOTICE.txt ?tmp ?
查看lib下的jar包,發現是基于jetty 運行 ?
(保留默認,不用改,除了端口8081看看是否沖突) ??
# cd conf ?
# vi nexus.properties ?
# Jetty section ?
application-port=8081 ?
application-host=0.0.0.0 ?
nexus-webapp=${bundleBasedir}/nexus ?
nexus-webapp-context-path=/nexus ?
??
# Nexus section ?
nexus-work=${bundleBasedir}/../sonatype-work/nexus ?
runtime=${bundleBasedir}/nexus/WEB-INF ?
??
??
4、編輯nexus 腳本, 配置RUN_AS_USER 參數 ?
# vi /root/nexus/nexus-2.11.2-03/bin/nexus ?
# cd conf ?
# vi nexus.properties ?
# Jetty section ?
application-port=8081 ?
application-host=0.0.0.0 ?
nexus-webapp=${bundleBasedir}/nexus ?
nexus-webapp-context-path=/nexus ?
??
# Nexus section ?
nexus-work=${bundleBasedir}/../sonatype-work/nexus ?
runtime=${bundleBasedir}/nexus/WEB-INF ?
??
??
4、編輯nexus 腳本, 配置RUN_AS_USER 參數 ?
# vi /root/nexus/nexus-2.11.2-03/bin/nexus ?
#RUN_AS_USER= ?
改為: ?
RUN_AS_USER=root ?
??
5、防火墻中打開8081 端口 ?
# vi /etc/sysconfig/iptables ?
添加: ?
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8081 -j ACCEPT ?
保存后重啟防火墻 ?
# service iptables restart ?
??
6、啟動nexus ?
# /root/nexus/nexus-2.11.2-03/bin/nexus start ?
**************************************** ?
WARNING - NOT RECOMMENDED TO RUN AS ROOT ?
**************************************** ?
Starting Nexus OSS... ?
Started Nexus OSS. ?
??
?
改為: ?
RUN_AS_USER=root ?
??
5、防火墻中打開8081 端口 ?
# vi /etc/sysconfig/iptables ?
添加: ?
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8081 -j ACCEPT ?
保存后重啟防火墻 ?
# service iptables restart ?
??
6、啟動nexus ?
# /root/nexus/nexus-2.11.2-03/bin/nexus start ?
**************************************** ?
WARNING - NOT RECOMMENDED TO RUN AS ROOT ?
**************************************** ?
Starting Nexus OSS... ?
Started Nexus OSS. ?
??
?
7、配置開機啟動
vi /etc/rc.local
增加下面行
/root/nexus/nexus-2.11.2-03/bin/nexus start ?
?
8、瀏覽器中打開:http://192.168.78.132:8081/nexus/ ?
8、瀏覽器中打開:http://192.168.78.132:8081/nexus/ ?
9、登錄,默認用戶名admin,默認密碼admin123
10、Nexus 配置 (登錄后) ?
1、菜單Administration/Server 配置郵箱服務地址
1、菜單Administration/Server 配置郵箱服務地址
該郵箱發送通知消息用
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
?給用戶配置郵箱地址,方便忘記密碼時找回,和接受通知
倉庫類型
group ?倉庫組:Nexus 通過倉庫組的概念統一管理多個倉庫,
這樣我們在項目中直接請求倉庫組即可請求到倉庫組管理的多個倉庫。
hosted 宿主倉庫:主要用于發布內部項目構件或第三方的項目構件(如購買商業的構件)?
以及無法從公共倉庫獲取的構件(如 ?oracle ?的 ?JDBC ?驅動) ?
proxy 代理倉庫:代理公共的遠程倉庫
virtual 虛擬倉庫:用于適配 Maven 1
?
一般用到的倉庫種類是hosted、proxy ?
??
Hosted 倉庫常用類型說明: ?
releases ?內部的模塊中release 模塊的發布倉庫,發行版,穩定版,可用于生產 ?
snapshots 內部的模塊中SNAPSHOT 模塊的倉庫 ,內測版,開發版
3rd party 第三方依賴的倉庫,這個數據通常是由內部人員自行下載之后發布上去 ?
??
一般用到的倉庫種類是hosted、proxy ?
??
Hosted 倉庫常用類型說明: ?
releases ?內部的模塊中release 模塊的發布倉庫,發行版,穩定版,可用于生產 ?
snapshots 內部的模塊中SNAPSHOT 模塊的倉庫 ,內測版,開發版
3rd party 第三方依賴的倉庫,這個數據通常是由內部人員自行下載之后發布上去 ?
??
Maven 依賴包下載流程
如果構建的Maven 項目本地倉庫沒有對應的依賴包,那么就會去Nexus 私服去下載, ?
如果Nexus私服也沒有此依賴包,就回去遠程中央倉庫下載依賴,這些中央倉庫就是proxy。 ?
Nexus 私服下載成功后再下載至本地Maven 庫供項目引用。 ?
設置proxy 代理倉庫準許遠程下載
設置Apache Snapshots/Central/Codehaus Snapshots等proxy代理倉庫允許遠程訪問