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