Nexus存儲(chǔ)庫(kù)管理器搭建-Maven私服詳解
在企業(yè)開(kāi)發(fā)過(guò)程中,就比如說(shuō)我們Java程序員,一般都是使用Spring或者是SpringBoot項(xiàng)目進(jìn)行開(kāi)發(fā)的,基本上都是基于Maven或者是Gradle構(gòu)建的項(xiàng)目,如果說(shuō)我們使用的Maven倉(cāng)庫(kù)是中央倉(cāng)庫(kù)的話(huà),在企業(yè)內(nèi)部協(xié)同開(kāi)發(fā)的時(shí)候,會(huì)帶來(lái)諸多不便。
例如,當(dāng)我們需要協(xié)同開(kāi)發(fā)時(shí),難免會(huì)對(duì)Jar包進(jìn)行管理,不可能將我們的Jar包上傳至中央倉(cāng)庫(kù)去,所以我們需要搭建屬于內(nèi)部的Maven倉(cāng)庫(kù)。Maven私服倉(cāng)庫(kù)也有者諸多好處。
本文詳細(xì)講述了 Maven私服的搭建、Jar包部署以及SpringBoot配置。
一、概述
Nexus 是一個(gè)存儲(chǔ)庫(kù)管理器,極大地簡(jiǎn)化了內(nèi)部倉(cāng)庫(kù)的維護(hù)和外部倉(cāng)庫(kù)的訪(fǎng)問(wèn)。
有非常簡(jiǎn)單便捷的用戶(hù)操作界面,方便對(duì)Nexus操作及管理。
在 Nexus 3.0 版本后,增加了對(duì) Docker、NetGet、npm、Bower的支持。
二、為什么要使用Maven私服倉(cāng)庫(kù)
大家可能會(huì)有一個(gè)疑問(wèn),為啥要搭建Maven私服呢?使用官方的Maven倉(cāng)庫(kù)不就可以嗎?而且國(guó)內(nèi)也有鏡像加速地址,比如阿里等。而我們?nèi)ゴ罱ㄒ粋€(gè)Maven私服,需要在服務(wù)器單獨(dú)進(jìn)行搭建,還要進(jìn)行維護(hù)。
針對(duì)這些問(wèn)題,下面是使用Maven私服的好處:
- 托管內(nèi)部存儲(chǔ)庫(kù): 可以共享內(nèi)部依賴(lài)項(xiàng),以方便將依賴(lài)項(xiàng)安裝在每個(gè)開(kāi)發(fā)人員的本地存儲(chǔ)庫(kù)中。
- 加速M(fèi)aven構(gòu)建: 當(dāng)在 Maven 中運(yùn)行多模塊項(xiàng)目時(shí),如果項(xiàng)目依賴(lài)于幾個(gè) SNAPSHOT,或者沒(méi)有指定插件版本,Maven 可能必須向遠(yuǎn)程存儲(chǔ)庫(kù)發(fā)出數(shù)十到數(shù)百個(gè)請(qǐng)求。安裝 Nexus 的本地實(shí)例后將構(gòu)建時(shí)間大大的縮減了。
- 節(jié)省帶寬: 如果沒(méi)有 Maven 私服,開(kāi)發(fā)人員會(huì)浪費(fèi)帶寬一遍又一遍的從中央倉(cāng)庫(kù)下載相同的文件。使用 Nexus 來(lái)保留本地緩存將節(jié)省大量帶寬。
- 控制和審計(jì): 可以有效的控制開(kāi)發(fā)團(tuán)隊(duì)將使用哪些依賴(lài)項(xiàng)。
- 可上傳部署第三方Jar: 可以方便的上傳第三方Jar包,并對(duì)其進(jìn)行管理。
- 可預(yù)測(cè)性和穩(wěn)定性: 依靠中央倉(cāng)庫(kù)進(jìn)行日常運(yùn)營(yíng)也意味著依賴(lài)于互聯(lián)網(wǎng)連接,如果有 Nexus ,則可以確保即使失去互聯(lián)網(wǎng)連接,構(gòu)建工作也可以繼續(xù)進(jìn)行。
三、搭建Nexus
這里使用docker來(lái)搭建Nexus。
1)、創(chuàng)建文件夾
mkdir -p /usr/local/docker/nexus
2)、創(chuàng)建docker-compose文件
vi /usr/local/docker/nexus/docker-compose.yml
docker-compose.yml內(nèi)容如下:
version: '3.1'
services:
nexus:
restart: always
image: sonatype/nexus3
container_name: nexus
privileged: true
ports:
- 8081:8081
volumes:
- ./data:/nexus-data3)、啟動(dòng)
啟動(dòng)命令
docker-compose up -d
如果遇到文件夾權(quán)限問(wèn)題,使用命令更改文件夾權(quán)限chmod -R 777 data,然后在重新啟動(dòng)
4)、訪(fǎng)問(wèn)
啟動(dòng)完成后,瀏覽器訪(fǎng)問(wèn)http://IP:8081/,效果如下:

5)、登錄
登錄Nexus,點(diǎn)擊右上角 Sign in,第一次登錄會(huì)提示admin的密碼在哪,根據(jù)提示去相關(guān)目錄查看。docker-compose中映射nexus-data目錄為/usr/local/docker/nexus/data目錄,所以我們?cè)?code>data目錄去找admin.password文件即可看到密碼了。


查看密碼
$ cat admin.password 1cf97ae1-270f-47e5-8c83-f5af04af34af
登錄后會(huì)提示設(shè)置新的密碼,設(shè)置一個(gè)記得住的密碼即可。
四、SpringBoot整合
以my-project項(xiàng)目為例。
4.1、pom.xml配置
有一個(gè)統(tǒng)一的依賴(lài)管理模塊my-project-dependencies,在pom.xml中增加部署服務(wù)器的 Maven 節(jié)點(diǎn)內(nèi)容以及倉(cāng)庫(kù)地址,內(nèi)容如下:
<!-- 部署服務(wù)器的 Maven 節(jié)點(diǎn) --> <distributionManagement> <repository> <id>nexus-releases</id> <name>Nexus Release Repository</name> <url>http://192.168.110.158:8081/repository/maven-releases/</url> </repository> <snapshotRepository> <id>nexus-snapshots</id> <name>Nexus Snapshot Repository</name> <url>http://192.168.110.158:8081/repository/maven-snapshots/</url> </snapshotRepository> </distributionManagement> <repositories> <repository> <id>nexus</id> <name>Nexus Repository</name> <url>http://192.168.110.158:8081/repository/maven-public/</url> <snapshots> <enabled>true</enabled> </snapshots> <releases> <enabled>true</enabled> </releases> </repository> <repository> <id>aliyun-repos</id> <name>Aliyun Repository</name> <url>http://maven.aliyun.com/nexus/content/groups/public</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> <repository> <id>sonatype-repos</id> <name>Sonatype Repository</name> <url>https://oss.sonatype.org/content/groups/public</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> <repository> <id>sonatype-repos-s</id> <name>Sonatype Repository</name> <url>https://oss.sonatype.org/content/repositories/snapshots</url> <releases> <enabled>false</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> <repository> <id>spring-snapshots</id> <name>Spring Snapshots</name> <url>https://repo.spring.io/snapshot</url> <snapshots> <enabled>true</enabled> </snapshots> </repository> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>nexus</id> <name>Nexus Plugin Repository</name> <url>http://192.168.110.158:8081/repository/maven-public/</url> <snapshots> <enabled>true</enabled> </snapshots> <releases> <enabled>true</enabled> </releases> </pluginRepository> <pluginRepository> <id>aliyun-repos</id> <name>Aliyun Repository</name> <url>http://maven.aliyun.com/nexus/content/groups/public</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </pluginRepository> </pluginRepositories>
將IP地址更改為自己的就可以了
4.2、測(cè)試部署
使用dos窗口進(jìn)入my-project-dependencies目錄下,執(zhí)行部署命令
mvn deploy

此時(shí)出現(xiàn)失敗,關(guān)鍵信息Return code is: 401, ReasonPhrase: Unauthorized. ,錯(cuò)誤問(wèn)題是未授權(quán)
我們打開(kāi)我們配置的Maven的settings.xml,在servers節(jié)點(diǎn)增加如下配置
<server> <id>nexus-releases</id> <username>admin</username> <password>123456</password> </server> <server> <id>nexus-snapshots</id> <username>admin</username> <password>123456</password> </server>
- id: 與構(gòu)建項(xiàng)目的pom.xml中的repository的id一致。
- username: 部署用戶(hù)(可在Nexus中單獨(dú)創(chuàng)建一個(gè)用戶(hù)專(zhuān)門(mén)拿來(lái)部署,這里直接使用admin)
- password: 登錄密碼
配置好這些后,先將原先的命令窗口關(guān)閉,打開(kāi)一個(gè)新的,在執(zhí)行一次部署命令
mvn deploy

部署成功,接著我們打開(kāi)Nexus端查看部署上來(lái)的項(xiàng)目

在 Maven 私服中也可以看到,大功告成~
五、上傳部署Jar包
在開(kāi)發(fā)過(guò)程中,我們可能會(huì)單獨(dú)的對(duì)Jar進(jìn)行管理,而我們手中又只有一個(gè)Jar文件。這時(shí),我們需要使用到Nexus的上傳功能
1)、點(diǎn)擊Upload->選擇需要上傳的倉(cāng)庫(kù)

2)、上傳Jar包,填寫(xiě)表單信息

3)、上傳成功

總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
feign調(diào)用返回object類(lèi)型轉(zhuǎn)換方式
這篇文章主要介紹了feign調(diào)用返回object類(lèi)型轉(zhuǎn)換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06
Java如何獲取當(dāng)天零點(diǎn)和明天零點(diǎn)的時(shí)間和時(shí)間戳
這篇文章主要介紹了如何在Java中獲取當(dāng)天零點(diǎn)和明天零點(diǎn)的時(shí)間和時(shí)間戳,并提供了示例代碼,新手小白完全可以通過(guò)文中介紹的代碼實(shí)現(xiàn),需要的朋友可以參考下2025-03-03
Mybatis-plus中IService接口的基本使用步驟
Mybatis-plus是一個(gè)Mybatis的增強(qiáng)工具,它提供了很多便捷的方法來(lái)簡(jiǎn)化開(kāi)發(fā),IService是Mybatis-plus提供的通用service接口,封裝了常用的數(shù)據(jù)庫(kù)操作方法,包括增刪改查等,下面這篇文章主要給大家介紹了關(guān)于Mybatis-plus中IService接口的基本使用步驟,需要的朋友可以參考下2023-06-06
Java注解詳解及實(shí)現(xiàn)自定義注解的方法
這篇文章主要介紹了Java注解詳解及實(shí)現(xiàn)自定義注解的方法,本文給大家介紹了jdk中預(yù)定義的一些注解及自定義注解的相關(guān)知識(shí),需要的朋友可以參考下2022-06-06

