引言
搭建maven私服主要是為了方便在一個團隊中使用maven中央倉庫沒有的jar包,這些非中央倉庫的jar包可能是自己團隊開發的公共依賴jar包,可能是第三方私有的認證相關jar包,特殊的還有oracle的驅動jar包,下面是使用Nexus搭建maven私服及私服使用
Nexus3.x安裝及配置
前置條件要求存在jdk1.8的環境
下載
這里之所以要特地提下下載是因為這個東西是真難下,我的電腦本身一直沒有安裝過專門的下載工具(度盤不算),一般下載都是走網盤或者瀏覽器直接下載,這次無論度盤的離線下載還是瀏覽器下載都非常慢甚至下載失敗(100M光纖),在服務器上使用wget同樣很慢,最后安裝了迅雷使用迅雷下載后速度快很多,看來下載確實需要專業的下載工具,下載完成后上傳到服務器上即可,當然也可以直接在服務器上使用wget下載,如果不嫌棄下載的慢的話:
官方下載頁:
https://www.sonatype.com/download-oss-sonatype
實際資源地址
wget https://sonatype-download.global.ssl.fastly.net/repository/repositoryManager/3/nexus-3.10.0-04-unix.tar.gz
安裝及配置
#解壓
tar -zvxf nexus-3.10.0-04-unix.tar.gz
#解壓的文件夾移到nexus(自動創建)
mv nexus-3.10.0-04/ /usr/local/nexus
#防火牆開啟8081端口,該端口是nexus的默認端口(在/usr/local/nexus/etc/nexus-default.properties文件中)
vi /etc/sysconfig/iptables
# 在打開的文件中加入如下內容
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8081 -j ACCEPT
#啟動 ps 我安裝時第一次啟動使用./nexus start 訪問不到web頁面,使用run命令可以,之后使用start也可以了
./nexus run &
#啟動成功會有如下信息
WARNING: ************************************************************
WARNING: Detected execution as "root" user. This is NOT recommended!
WARNING: ************************************************************
Starting nexus
上面啟動成功后會警告不要使用root用戶啟動,這里可以新建一個用戶,也可以指定root用戶啟動,使他不出現警告,下面配置指定root用戶啟動
#該文件在bin目錄下和啟動程序nexus同級
vi nexus.rc
run_as_user=root
手動更新索引(可選)
我這里沒有下載索引,以前配置過nenus2.x時下載過全部索引,很大很慢,下載了一晚上,不下載索引並不影響使用,這里會同步當前項目使用的依賴到私服的索引中,有新的依賴從私服中獲取也會更新對應的索引,下面介紹一種離線安裝的方式
-
前往maven中央倉庫下載 indexer-cli-5.1.1.jar 解壓工具包
-
下載離線索引文件
nexus-maven-repository-index.gz nexus-maven-repository-index.properties
-
將3個文件放在同一目錄下解壓
java -jar indexer-cli-5.1.1.jar -u nexus-maven-repository-index.gz -d indexer
-
拷貝索引
nexus2.x拷貝到{nexus-home}/sonatype-work/nexus/indexer/central-ctx
nexus3.x拷貝到/sonatype-work/nexus3/blobs/default,3.x我沒嘗試過參考這篇博客
web界面
-
訪問web界面,使用默認管理賬號admin/admin123登錄
http://192.168.16.30:8081/ -
倉庫瀏覽在左側菜單欄Browse,這里有多種倉庫,相比於nexus2.x精簡了很多倉庫
nexus倉庫類型 Group:這是一個倉庫聚合的概念,用戶倉庫地址選擇Group的地址,即可訪問Group中配置的 所有倉庫資源,訪問順序取決於配置順序3.x默認Releases,Snapshots,Central,可在web頁面配置 在web界面點開 Hosted:私有倉庫,專門用來存儲我們自己生成的jar文件 3rd party:未發布到公網的第三方jar (3.x去除了) Snapshots:本地項目的快照倉庫 Releases: 本地項目發布的正式版本 Proxy:公網上發布的jar 例如:spring Central:中央倉庫 Apache Snapshots:Apache專用快照倉庫(3.x去除了)
-
配置Releases版本可重復上傳
點擊圖片畫框部分配置Releases: Deployment pollcy --> Allow redeploy
使用nenus本地maven配置
全局配置下載依賴(即項目pom無需配置)
在maven的setting.xml文件中配置私服配置,這種方式配置后所有本地使用該配置的maven項目的pom文件都無需配置私服下載相關配置
<profiles>
<profile>
<id>mycof</id>
<repositories>
<!-- 私有庫地址-->
<repository>
<id>nexus</id>
<url>http://192.168.16.30:8081/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<!--插件庫地址-->
<pluginRepository>
<id>nexus</id>
<url>http://192.168.16.30:8081/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
激活使用上面的配置
<!--激活profile-->
<activeProfiles>
<activeProfile>mycof</activeProfile>
</activeProfiles>
指定鏡像代理為我們的私服
<mirror>
<id>nexus-myself</id>
<!--*指的是訪問任何倉庫都使用我們的私服-->
<mirrorOf>*</mirrorOf>
<name>Nexus myself</name>
<url>http://192.168.16.30:8081/repository/maven-public/</url>
</mirror>
單獨項目下載依賴(即項目pom文件中配置)
這種配置是修改單個項目的pom文件,無需修改maven的setting配置(盡管如此說,但是如果setting.xml中配置了mirror標簽,並且mirrorOf為*或者私服地址,還是會被攔截,被代理指向代理地址)
<repositories>
<repository>
<id>nexus</id>
<url>http://192.168.16.30:8081/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
建議使用全局的setting配置,一個項目組共用一個maven的setting配置,項目中就無需配置下載相關的私服倉庫配置
使用私服后倉庫訪問順序
上傳jar包配置
對於中央倉庫沒有的jar包,需要我們自己將jar包發布到私服中去,其中jar包主要分為兩類,一類是本地自己開發供給項目組其余同事使用,這種直接配置項目的pom文件和maven的setting文件,之后deploy發布即可發布到,另一類是第三方jar包,可以直接使用web頁面上傳並設置對應GAV即可
本地maaven開發的項目上傳配置
-
maven的setting文件配置
這里要配置配置上傳用戶及倉庫信息,我這里直接使用了admin用戶,在nenus2.x中還內置了一個deployment/deployment123用戶,在3.x該用戶被移除了,這里可以自己配置角色和用戶,我就直接使用admin用戶了<servers> <server> <id>nexus-releases</id> <username>admin</username> <password>admin123</password> </server> <server> <id>nexus-snapshots</id> <username>admin</username> <password>admin123</password> </server> </servers>
-
項目中的pom文件配置
<distributionManagement> <repository> <id>nexus-releases</id> <name>Nexus Release Repository</name> <url>http://192.168.16.30:8081/repository/maven-releases/</url> </repository> <snapshotRepository> <id>nexus-snapshots</id> <name>Nexus Snapshot Repository</name> <url>http://192.168.16.30:8081/repository/maven-snapshots/</url> </snapshotRepository> </distributionManagement>
-
執行maven的deploy命令
這是myeclipse中上傳本地項目jar到私服,IDEA中更為簡單直接點擊maven周期中的deploy即可
出現uploading信息並且沒報錯說明上傳成功
到對應倉庫查看
注意:
-
這里只有Snapshot的倉庫上傳成功,Release倉庫並沒有上傳成功,這是因為版本號名稱結尾有SNAPSHOT,默認以這個結尾是不會上傳到Release倉庫去的,去除就會上傳到Release倉庫且不會上傳到快照倉庫
-
Release倉庫默認不支持重復發布,可配置
-
注意setting中server標簽下的id要和pom文件中倉庫配置的id相同,即指定上傳到哪個倉庫
第三方jar包上傳
對於第三方jar包的上傳采用nenus提供的web界面上傳,上傳成功后需要使用該jar包的話,依賴中填寫自定義的GAV即可