使用Nexus搭建Maven私服、私服下载与上传
目錄
- 一、概念
- 1.私服簡介
- 2.私服的好處
- 3.搭建私服的開源倉庫管理軟件
- 二、使用Nexus搭建Maven私服(Windows環境)
- 1.安裝jdk
- 2.下載即安裝Nexus
- 2.1 下載
- 2.2 下載完成后進行解壓
- 2.3.啟動nexus
- 2.4.訪問nexus首頁
- 3.初始設置
- 3.1 登錄Nexus
- 3.2 初始設置
- 三、Nexus中的倉庫分類
- 1.代理倉庫
- 1.1 概念
- 2.創建代理倉庫
- 2.宿主倉庫
- 3.倉庫組
- 四、配置本地maven從nexus下載構件
- 1.方式1:pom.xml方式
- 2.方式1示例
- 3.方式2:settings配置profiles 、activeProfile
- 4.方式2示例
- 3.方式3:鏡像方式(推薦)
- 5.方式3示例
- 總結:
- 五、本地構件發布到私服
- 1.使用maven部署構件到nexus私服
- 2.手動部署第三方構件到nexus私服
一、概念
1.私服簡介
私服是一種特殊的遠程倉庫,它是架設在局域網內的倉庫服務,私服代理廣域網上的遠程倉庫,供局域網內的Maven用戶使用。當Maven需要下載構件的時候,它從私服請求,如果私服上不存在該構件,則從外部的遠程倉庫下載,緩存在私服上之后,再為Maven的下載請求提供服務。我們還可以把一些無法從外部倉庫下載到的構件上傳到私服上。
2.私服的好處
-
加速maven構件的下載速度
-
節省寬帶,加速項目構建速度
-
方便部署自己的構件以供他人使用
-
提高maven的穩定性,中央倉庫需要本機能夠訪問外網,而如果采用私服的方式,只需要本機訪問內網私服就可以了。
3.搭建私服的開源倉庫管理軟件
(1)Apache基金會的archiva
http://archiva.apache.org/(2)JFrog的Artifactory
https://jfrog.com/artifactory/(3)Sonatype的Nexus
https://my.sonatype.com/這些都是開源的私服軟件,都可以自由使用。用的最多的是第三種Nexus,本文我們主要以這個來講解.。
二、使用Nexus搭建Maven私服(Windows環境)
nexus是java開發的,所以運行的時候需要有java環境的支持。
1.安裝jdk
確保使用系統中安裝了jdk,若沒有進行下載安裝。
2.下載即安裝Nexus
2.1 下載
Nexus官方下載地址:https://help.sonatype.com/repomanager3/download
點擊復制下載鏈接,使用迅雷方式下載,下載速度比較快。
2.2 下載完成后進行解壓
2.3.啟動nexus
啟動服務:切換到D:\nexus-3.40.1-01-win64\nexus-3.40.1-01\bin目錄下,輸入 nexus.exe /run
如下信息表示安裝成功:
2.4.訪問nexus首頁
瀏覽器打開,輸入 http://localhost:8081/
效果如下:
注意:如果服務器的8081端口沒有放開,則訪問不了 nexus 首頁;比如阿里云服務器需要在安全組里面打開 8081 端口。
3.初始設置
3.1 登錄Nexus
點擊右上角的 Sign in,輸入用戶名和密碼。nexus默認用戶名是admin。
nexus密碼是第一次啟動的時候生成的,密碼位于下面的文件中:
D:\nexus-3.40.1-01-win64\sonatype-work\nexus3\admin.password
3.2 初始設置
登錄成功后會彈出一些設置,如下:
點擊Next,設置新的登錄密碼(新密碼要保存好),如下:
啟用或禁用匿名登陸:
區別:
啟用匿名登錄則在使用該 nexus 時,不需要賬號密碼;
禁用匿名登錄則在使用該 nexus 時,需要賬號密碼。
也就是 maven 的 settings.xml 文件中,配置使用該 nexus 時,是否需要配置賬號密碼信息。
點擊FInish,完成設置:
三、Nexus中的倉庫分類
用戶可以通過nexus去訪問遠程倉庫,可以將本地的構件發布到nexus中,nexus是如何支撐這些操作的呢?
nexus中有個倉庫列表,里面包含了各種各樣的倉庫,如下圖:
上圖中是nexus安裝好默認自帶的倉庫列表,主要有3種類型:
-
代理倉庫:代理公共的遠程倉庫
-
宿主倉庫:主要用于部署無法從公共倉庫獲取的構件(如 oracle 的 JDBC 驅動)以及自己或第三方的項目構件
-
倉庫組:Nexus 通過倉庫組的概念統一管理多個倉庫,這樣我們在項目中直接請求倉庫組即可請求到倉庫組管理的多個倉庫
1.代理倉庫
1.1 概念
代理倉庫主要是讓使用者通過代理倉庫來間接的訪問外部的第三方遠程倉庫的,如通過代理倉庫訪問maven中央倉庫、阿里的maven倉庫等等。代理倉庫會從被代理的倉庫中下載構件,緩存在代理倉庫中以供maven用戶使用。
2.創建代理倉庫
(1)在倉庫列表頁面,點擊“Create repository”按鈕,如下:
進入添加頁面,選擇maven2(proxy),這個表示代理倉庫,如下圖:
輸入遠程倉庫的信息,如下:
點擊底部的‘Create repository",創建完成,如下:
在倉庫列表中可以看到創建的倉庫:
2.宿主倉庫
宿主倉庫主要是給我們自己用的,主要有2點作用:
-
將私有的一些構件通過nexus中網頁的方式上傳到宿主倉庫中給其他同事使用
-
將自己開發好一些構件發布到nexus的宿主倉庫中以供其他同事使用
3.倉庫組
maven用戶可以從代理倉庫和宿主倉庫中下載構件至本地倉庫,為了方便從多個代理倉庫和宿主倉庫下載構件,maven提供了倉庫組。
倉庫組中可以有多個代理倉庫和宿主倉庫,而maven用戶只用訪問一個倉庫組就可以間接的訪問這個組內所有的倉庫,倉庫組中多個倉庫是有順序的,當maven用戶從倉庫組下載構件時,倉庫組會按順序依次在組內的倉庫中查找組件,查找到了立即返回給本地倉庫,所以一般情況我們會將速度快的放在前面。
倉庫組內部實際上是沒有構件內容的,他只是起到一個請求轉發的作用,將maven用戶下載構件的請求轉發給組內的其他倉庫處理。
nexus默認有個倉庫組maven-public,如下:
點擊一下maven-public這行記錄,進去看一下,如下:
上面的URL是 倉庫組對外的一個url,我們本地的maven可以通過這個url來從倉庫組中下載構件至本地倉庫。
上面的紅框中是倉庫組中的成員,目前包含了3個倉庫,第1個是宿主的releases版本倉庫,第2個是宿主快照版本的倉庫,第3個是代理倉庫(maven社區中央倉庫的代理)。
剛才我們新增的maven-aliyun在左邊,我們將其也加到右邊的倉庫成員(Members)列表,然后將maven-aliyun這個倉庫放在第3個位置,這個倉庫的速度比maven-central要快一些,能加速我們下載maven構件的速度,如下圖:
四、配置本地maven從nexus下載構件
從 Nexus 私服下載構件的配置方法共有三種
1.方式1:pom.xml方式
以 從nexus默認倉庫組中下載構件,先獲取倉庫組對外的地址,點擊下圖中的copy按鈕,獲取倉庫組的地址:
修改項目中的pom.xml,加入如下內容:
注意:分別配置倉庫和插件倉庫
由于nexus私服需要有用戶名和密碼登錄才能訪問,所以需要有憑證,憑證需要在settings.xml文件中配置,在~.m2\settings.xml文件中的servers元素中加入如下內容:
注意:
上面的server->id的值和pom.xml中repository->id的值一致,通過這個id關聯找到憑證的。
server元素中的username和password你們根據自己的去編輯,我這邊密碼設置的是123456
2.方式1示例
idea創建SpringBoot項目:
點擊Next,選擇所需依賴,點擊FInish。
配置項目的maven:
點擊上面的OK完成配置。
修改上面idea項目中的pom.xml文件,內容如下:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.0</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>nexus-demo</artifactId><version>0.0.1-SNAPSHOT</version><name>nexus-demo</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--Json工具類--><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.68</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build><!--配置倉庫--><repositories><repository><id>maven-nexus</id><!--maven私服倉庫組的地址--><url>http://localhost:8081/repository/maven-public/</url><releases><enabled>true</enabled></releases><snapshots><enabled>true</enabled></snapshots></repository></repositories><!--配置插件倉庫--><pluginRepositories><pluginRepository><id>maven-nexus</id><!--maven私服倉庫組的地址--><url>http://localhost:8081/repository/maven-public/</url><releases><enabled>true</enabled></releases><snapshots><enabled>true</enabled></snapshots></pluginRepository></pluginRepositories></project>刪除本地倉庫中以下幾個目錄:
D:\mvnrepository\com\alibaba
在 nexus-demo終端下輸入如下命令:
編譯結果如下:
從輸出中可以看出fastjson這個jar包從maven-nexus中下載了,下載地址正是我們nexus私服中的那個地址。
mvn compile的作用:編譯命令,maven會自動下載依賴jar
3.方式2:settings配置profiles 、activeProfile
(1)在 settings.xml 的 profiles 標簽中添加如下內容
<profile><id>nexus</id><!--配置倉庫 --><repositories><repository><id>nexus</id><name>maven-nexus</name><url>http://localhost:8081/repository/maven-public/</url><releases><enable>true</enable></releases><snapshots><enable>true</enable></snapshots></repository></repositories><!--配置插件倉庫 --><pluginRepositories><pluginRepository><id>nexus</id><name>maven-nexus</name><url>http://localhost:8081/repository/maven-public/</url><releases><enable>true</enable></releases><snapshots><enable>true</enable></snapshots></pluginRepository></pluginRepositories></profile>注:使用 id 為 nexus 的 profile 分別配置倉庫和插件倉庫
(2)在 settings.xml 的 activeProfiles標簽中添加activeProfile:
<!-- 激活上面配置的 nexus profile --><activeProfiles><activeProfile>nexus</activeProfile></activeProfiles>(3)由于nexus的url是需要用戶名和密碼才可以訪問的,所以需要配置訪問憑證,在servers標簽中加入如下內容:
<server><id>nexus</id><username>admin</username><password>123456</password> </server>4.方式2示例
和方式1示例同樣的方式創建 nexus-demo-two項目,其項目pom.xml如下:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.1</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>nexus-demo-two</artifactId><version>0.0.1-SNAPSHOT</version><name>nexus-demo-two</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--Json工具類--><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.68</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>刪除本地倉庫中的以下幾個目錄:
D:\mvnrepository\com\alibaba在該項目終端下輸入編譯命令:
mvn compile編譯結果:
從輸出中可以看出fastjson這個jar包從maven-nexus中下載了,下載地址正是我們nexus私服中的那個地址。
3.方式3:鏡像方式(推薦)
(1)在settings.xml的mirrors標簽中添加如下內容:
<mirror><!-- id:可自定義 --><id>nexus</id><!-- name:可自定義 --><name>nexus maven</name><!-- mirrorOf:配置成 * 表示通過 nexus 訪問網路上所有的遠程倉庫;配置成central,表示訪問 nexus 的central倉庫; --><mirrorOf>*</mirrorOf> <!-- url:倉庫地址 --> <url>http://localhost:8081/repository/maven-public/</url> </mirror>注:配置一個匹配任何倉庫的鏡像,其地址為 Nexus 私服
(2)在 settings.xml 的 profiles 標簽中添加如下內容
注:使用 id 為 nexus 的 profile 分別配置倉庫和插件倉庫,但倉庫和插件倉庫的 id 都為 central,這將覆蓋超級 POM中央倉庫的配置,而 url 已無關緊要,因為所有的請求都會通過鏡像訪問私服地址
配置倉庫和插件倉庫的主要目的是開啟對快照版本構件下載的支持
(3)由于nexus的url是需要用戶名和密碼才可以訪問的,所以需要配置訪問憑證,在servers標簽中加入如下內容:
<server><id>nexus</id><username>admin</username><password>123456</password> </server>5.方式3示例
刪除本地倉庫中的以下幾個目錄:
D:\mvnrepository\com\alibaba在上面的 nexus-demo-two項目的終端下輸入編譯命令:
mvn compile編譯結果:
從輸出中可以看出fastjson這個jar包從maven-nexus中下載了,下載地址正是我們nexus私服中的那個地址。
總結:
| 方法一 | 針對當前 Maven 項目 |
| 方法二 | 針對所有 Maven 項目 |
| 方法三 | 針對所有 Maven 項目 |
注意:方法二和方法三雖然都可以一勞永逸,但方法二除了從 Nexus 私服下載構件之外,還會不時訪問中央倉庫
我們希望的是所有 Maven 下載請求都僅僅通過 Nexus 私服,以全面發揮私服的作用,而方法三剛好做到了這點
五、本地構件發布到私服
常用的方法有兩種:
1.使用maven部署構件到nexus私服
2.手動部署第三方構件到nexus私服:比如SqlServer的 JDBC 驅動,這個包遠程倉庫是不存在的,我們要把這個包上傳到私服供所有開發使用
1.使用maven部署構件到nexus私服
我們創建maven項目的時候,會有一個pom.xml文件,里面有個version元素,這個是這個構件的版本號,可以去看一下上面我們剛創建的nexus-demo-two,默認是0.0.1-SNAPSHOT,這個以-SNAPSHOT結尾的表示是個快照版本,叫做SNAPSHOT版本,快照版本一般是不穩定的,會反復發布、測試、修改、發布。而最終會有一個穩定的可以發布的版本,是沒有-SNAPSHOT后綴的,這個叫做release版本。
而nexus私服中存儲用戶的構件是使用的宿主倉庫,這個我們上面也有說過,nexus私服中提供了兩個默認的宿主倉庫分別用來存放SNAPSHOT版本和release版本,如下圖:
maven-releases宿主倉庫用來存放用戶自己release版本的構件
maven-snapshots宿主倉庫用來存放用戶snapshot版本的構件
使用maven部署構件到nexus私服的步驟如下:
(1)修改pom.xml
修改項目版本為SNAPSHOT/RELEASE,并發布到指定maven私服地址
(2)修改maven配置文件settings.xml
上面地址需要登錄才可以訪問,所以需要配置憑證,這個需要在settings.xml的servers元素中加入:
<server><!--此id要和pom.xml對應部署中設置的ID一致 --><id>nexus-releases</id><username>admin</username><password>123456</password> </server> <server><!--此id要和pom.xml對應部署中設置的ID一致 --><id>nexus-snapshots</id><username>admin</username><password>123456</password> </server>(3)上傳項目jar包到maven私服(IDEA)
在項目終端中輸入如下命令:
mvn deploy的作用:會對構件進行打包,然后上傳到私服中
輸出內容中有Uploading 正是我們在pom.xml配置的快照版本的地址,上面輸出內容中有具體的地址,和快照的地址也是一樣的,上傳成功了。
我們去nexus私服中看一下,訪問nexus私服中快照版本倉庫的地址:
http://localhost:8081/repository/maven-snapshots/
點擊上面的bowse連接,如下圖,我們的構件上傳成功了:
如果其他同事需要使用上面這個構件,只需要點擊下圖中的pom文件,右邊會顯示構件的坐標,然后可以拿去使用了,如下圖
上面是將快照版本的發布到了nexus私服的快照宿主倉庫。
要想將release穩定版本的發布到nexus私服,只需要修改nexus-demo-two項目的version版本號:將-SNAPSHOT后綴去掉。
然后重新執行 mvn deploy就行了。執行成功之后,訪問 nexus私服中穩定版本倉庫的地址:
http://localhost:8081/repository/maven-releases/
,然后在出現的頁面點擊bowse連接即可看到上傳的構件。
2.手動部署第三方構件到nexus私服
手動上傳只支持發布穩定版本的構件,操作過程如下圖:
登錄nexus,按圖操作:
進入上傳頁面:點擊Browse選擇本地的構件,然后輸入其他坐標信息,點擊Upload完成上傳操作
上傳成功。
可點擊“view it now”查看:
也可通過“http://localhost:8081/#browse/browse:maven-releases”地址進行訪問:
參考資料:https://blog.csdn.net/weixin_30730151/article/details/95249098
總結
以上是生活随笔為你收集整理的使用Nexus搭建Maven私服、私服下载与上传的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jupyter的环境问题:在jupyte
- 下一篇: 机房动环设备集中监控数据运维云平台解决方