nexus搭建maven私服

我安装的是非docker版本-放在了202服务器上面
  1. https://maven.apache.org/guides/mini/guide-mirror-settings.html #官网文档

我的包放到这个目录下面了

nexus搭建maven私服 - 图1

前提:已安装 JDK 并配置好了环境变量

1、下载最新版 Nexus(本教程使用的是:nexus-2.11.2-03-bundle.tar.gz),下载地址:

要安装官网的,官网比较繁琐,我查找了好多资料

  1. http://www.sonatype.org/nexus/go/
  1. Nexus 官网:http://xxw.ac.cn/2iMC
  2. Nexus 下载(需要填写信息):http://xxw.ac.cn/KD3X
  3. Nexus 下载(不需要填写信息):http://xxw.ac.cn/obGy
  4. Nexus 历史下载:http://xxw.ac.cn/mKeA
  5. 视频中用到的 Nexus Linux 版本:http://xxw.ac.cn/2xOD
  6. 视频中用到的 Nexus Windows 版本:http://xxw.ac.cn/ha2M
  7. Nexus Mac 版本:http://xxw.ac.cn/Z4Ih
  8. 软件免费下载:http://xxw.ac.cn/Vjrn
  9. Nexus 历史版本下载:http://xxw.ac.cn/py6h
  10. Nexus Windows 安装:http://xxw.ac.cn/WDAe
  11. Nexus Linux 安装:http://xxw.ac.cn/cRG6
  12. Nexus Windows 服务:http://xxw.ac.cn/wuQu
  13. Nexus Linux 服务:http://xxw.ac.cn/e3Qr
  14. 设置仓库:
  15. <repositories>
  16. <repository>
  17. <id>maven-public</id>
  18. <url>http://127.0.0.1:8081/repository/maven-public/</url>
  19. </repository>
  20. </repositories>
  21. 开放端口:
  22. firewall-cmd --zone=public --add-port=8081/tcp --permanent
  23. firewall-cmd --reload
  24. firewall-cmd --list-all

安装的是这个
nexus搭建maven私服 - 图2

下载好的包名
nexus搭建maven私服 - 图3

环境准备
  1. linux 系统、JDK8Nexus 压缩包(unix)。
  2. 由于Nexus 是基于 Java 语言的,因此安装 Nexus 必须先安装好JAVA(JDK),注意:
  3. maven 安装 这个打包的时候需要,建议安装一下
  4. Nexus2 是基于 JDK7
  5. Nexus3 是基于 JDK8

安装先看下本机服务占用的端口不要冲突了
nexus搭建maven私服 - 图4

安装步骤

  1. mkdir /nexus #创建目录

nexus搭建maven私服 - 图5

解压

  1. tar -zxvf nexus-3.38.1-01-unix.tar.gz #

nexus搭建maven私服 - 图6

(一个 nexus 服务,一个私有库目录)

nexus搭建maven私服 - 图7

  1. nexus-3.19.1-01 : nexus 应用程序目录
  2. sonatype-work : 私服的仓库,里面存储的是私服上的各种构件

Nexus 服务的默认端口是 8081

默认端口是 8081,如果要修改,可以在 sonatype-work/nexus3/etc 目录下的 nexus.properties 配置文件,将 application-port 配置成你要的端口号即可:

下面是我的路径

  1. /nexus/sonatype-work/nexus3/etc #这个路径下面的文件是注释掉的
  2. /nexus/nexus-3.38.1-01/etc #这个是引用的路径,这里解释一下我也不知道为什么有俩个路径,我是使用的这个
  3. 修改端口 application-port 配置成你要的端口号即可:

nexus搭建maven私服 - 图8

注释掉的文档
nexus搭建maven私服 - 图9

启动:

  1. 进入 /nexus/nexus-3.38.1-01/bin #目录,可以看见 nexus 文件,这就是 Nexus 服务的脚本文件:
  2. 通过观察该文件文本内容,可以看到 start run 命令都可以用来启动 Nexus 服务;区别在于:
  3. start 是后台启动,日志以文件形式保存;
  4. run 是当前进程启动,直接打印在控制台;

nexus搭建maven私服 - 图10

启动时候的差别

nexus搭建maven私服 - 图11

拓展:

  1. 1、其他常用命令还有:
  2. stop 是停止服务;
  3. restart 是重启服务;
  4. status 是查看服务状态

启动方式(2种):

2.1 start命令启动(后台进程形式)

  1. **在** /nexus/nexus-3.38.1-01/bin 目录下,**执行脚本命令,以后台进程的形式(不占用当前命令终端窗口),启动 Nexus 服务:**
  1. root@192:/nexus/nexus-3.38.1-01/bin# ls
  2. contrib nexus nexus.rc nexus.vmoptions
  3. root@192:/nexus/nexus-3.38.1-01/bin# pwd
  4. /nexus/nexus-3.38.1-01/bin
  5. root@192:/nexus/nexus-3.38.1-01/bin# ./nexus start
  6. WARNING: ************************************************************
  7. WARNING: Detected execution as "root" user. This is NOT recommended!
  8. WARNING: ************************************************************
  9. Starting nexus

nexus搭建maven私服 - 图12

启动需要等待一段时间,可用浏览器访问 linux 服务器ip:8081 来验证服务是否启动好。

2.1 cun命令启动(当前进程形式)

  1. /nexus/nexus-3.38.1-01/bin 目录下,执行脚本命令,以当前进程形式(会占用当前命令终端窗口),启动 Nexus 服务:

./nexus run
等待一段时间后,看到类似如下信息,则为启动成功:
————————————————
nexus搭建maven私服 - 图13

总结:

  1. 为了不占用当前命令终端窗口,推荐使用 **2.1 start命令启动(后台进程形式)Nexus 服务。**

开放端口:

最后一步,也是非常重要的一步,就是开放 linux 系统的防火墙端口,这里我使用了 Nexus 服务的 默认端口 8081,所以开放的就是 8081 端口: 我的操作系统是debian10的防火墙没有设置

先查看所有开放的端口号(首次执行该操作需要输入当前用户密码):我这里跳过了

  1. sudo firewall-cmd --zone=public --list-ports

开放 8081 端口:

  1. sudo firewall-cmd --zone=public --add-port=8081/tcp --permanent

重启防火墙服务:

  1. sudo firewall-cmd --reload

再次查看所有开放的端口号,可以看到 8081 端口已经开放了:

nexus搭建maven私服 - 图14

验证 Nexus服务:

  1. 验证方式有很多种:
  2. 1linux 系统命令终端 查看 **8081 端口**所占用的进程:
  1. 第一种方法
  2. netstat -lntp | grep 8081
  3. tcp 0 0 0.0.0.0:8081 0.0.0.0:* LISTEN 23278/java
  4. 第二种方法
  5. ps -ef | grep nexus

nexus搭建maven私服 - 图15

(强烈推荐)在浏览器访问 Nexus 的 Web 端首页,输入 linux 服务器ip:8081

nexus搭建maven私服 - 图16

这个页面很炫酷
nexus搭建maven私服 - 图17

出现类似以上3种信息,则说明 Nexus 服务已经启动成功了!!!

登录并初始化 Nexus

浏览器访问 Nexus 的 Web 端首页,并登录,输入账号、密码:

注意:

  1. 有些 Nexus 的版本中,是有默认配置的**账号(admin)**、**密码(admin123)**的,如果登录失败的话,可以**在 sonatype-work/nexus3 目录下 admin.password 文件中查看初始化密码**。

在 linux 系统命令终端中执行:

  1. root@192:/nexus/sonatype-work/nexus3# ls
  2. blobs db etc instances karaf.pid lock orient restore-from-backup
  3. cache elasticsearch generated-bundles kar keystores log port tmp
  4. root@192:/nexus/sonatype-work/nexus3# pwd
  5. /nexus/sonatype-work/nexus3
  6. #我的是再这个路径下面 有一个admin.password 文件文本内容,我修改玩密码之后就没有了
  7. # 查看 admin.password 文件文本内容
  8. cat admin.password
  9. vi admin.password
  10. vim admin.password

文件文本内容的第一行就是密码:

nexus搭建maven私服 - 图18

登陆

nexus搭建maven私服 - 图19

nexus搭建maven私服 - 图20

出现类似如下信息,则登录成功:
nexus搭建maven私服 - 图21

点击 Next 后,需要重置密码:

nexus搭建maven私服 - 图22

点击 Next 后,配置匿名访问:

nexus搭建maven私服 - 图23

配置完成:

nexus搭建maven私服 - 图24

Nexus 后台管理界面 —介绍重点

nexus搭建maven私服 - 图25

首先说说他的类型

-Name
  1. central: 该仓库代理 Maven 的中央仓库,策略为 Release ,只会下载和缓存中央仓库中的发布版本构件,我的理解:该仓库就是 Maven 中央仓库的中介,例如:你想从中央仓库中下载 jar 包,先必须要通过它,由它去帮你完成
  2. public: 仓库组,将所有的仓库聚合并通过一致的地址提供服务.我的理解:就是一个可以可以将其它不同策略的仓库组合在一起的大仓库
  3. releases: 策略为 Release 的宿主类型仓库,用来部署组织内部的发布版本构件.我的理解:就是公司内部项目发布的正式版本
  4. snapshots: 策略为 Snapshots 的宿主类型仓库,用来部署组织内部的快照版本构件.我的理解:就是公司内部项目发布的测试版本
  5. 3rd party:一个策略为 Release 的宿主类型仓库,用来部署无法从公共仓库获得的第三方发布版本构件.我的理解:既不属于中央仓库,也不属于公司自己的,就是第三方jar包. Nexus3 没有了 3rd party 仓库,需要自己创建
  6. nuget: .net 使用的仓库,可以忽略

-Type
  1. group(仓库组类型):又叫组仓库,用于方便开发人员自己设定的仓库(能够组合一个或者多个仓库为一个地址提供服务)
  2. hosted(宿主类型):内部项目的发布仓库(内部开发人员,发布上去存放的仓库)
  3. proxy(代理类型):从远程中央仓库中寻找数据的仓库(可以点击对应的仓库的 Configuration 页签下 Remote Storage Location 属性的值即被代理的远程仓库的路径)
  4. virtual(虚拟类型):虚拟仓库(这个基本用不到,重点关注上面三个仓库的使用)

-Format
  1. maven2 JAVA 仓库
  2. nuget .net 仓库

-Status
  1. online : 正常
  2. oneline Ready To connect : 正常

-URL
  1. 可以点击 copy 选项复制某一个仓库的地址

使用创建仓库

nexus搭建maven私服 - 图26

选择 maven2(hosted):

nexus搭建maven私服 - 图27

输入

nexus搭建maven私服 - 图28

接着

nexus搭建maven私服 - 图29

创建成功:

nexus搭建maven私服 - 图30

点击后能看见详情,url 就是新仓库的ip地址:
nexus搭建maven私服 - 图31

创建角色并权限配置( 不建议分配删除权限):

依次点击 Repository 仓库管理图标(齿轮)、 RolesCreate roleNexus role
nexus搭建maven私服 - 图32

填写角色信息,检索 关键字:

  1. nx-repository-admin-maven2-

赋予仓库的权限,这里我把maven2下 central、public、release、snapshots 库非删除权限(如:browse、edit、read权限),都赋予给 新建的角色,另外把 新建的 私库的 ** 权限(所有权限)也赋予给该角色:
nexus搭建maven私服 - 图33

检索 自定义仓库的库名,赋予权限 nx-repository-view-maven2-自定义库名-*:

注意:

  1. **这些权限一定要配置完整,否则很容易导致各种问题(比如:maven项目上传依赖失败等)**

nexus搭建maven私服 - 图34

  1. 点解 Create role 创建角色:

nexus搭建maven私服 - 图35

创建成功:

nexus搭建maven私服 - 图36

创建用户:

nexus搭建maven私服 - 图37

点击 Create local user 创建用户:

nexus搭建maven私服 - 图38

验证用户:

  1. 点击右上角 Sign out ,退出 admin 账号的登录状态,并使用 刚刚创建的自定义用户登录试试:

nexus搭建maven私服 - 图39

登录成功后,需要输入一个凭证,可以随便输入点什么,也可以直接 Cancel

nexus搭建maven私服 - 图40

拓展:

  1. 可以看到虽然登录成功了,但权限比较少:<br />![](https://tianmingqing.oss-cn-hangzhou.aliyuncs.com/aike/image-20220523142236594.png#crop=0&crop=0&crop=1&crop=1&id=cniru&originHeight=710&originWidth=1794&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)

在首页中,可以 看到这个用户并没有 SearchBrowseUpload 选项

nexus搭建maven私服 - 图41

解决:

  1. 重新用 admin 账号登录后,找到我们之前创建的角色,并分别检索 searchbrowseupload 关键字,把 nx-search-readnx-repository-view-*-*.browsenx-comopnet-upload 权限赋予给该角色:

nexus搭建maven私服 - 图42

nexus搭建maven私服 - 图43

nexus搭建maven私服 - 图44

再次以自定义用户登录,在首页中可以看到导航栏上出现了 SearchBrowseUpload 选项了

nexus搭建maven私服 - 图45

上传依赖包:

1、手动上传

  1. 依次点击**首页图标(箱子)** 、**Upload**、**最定义的私库:**<br />![](https://tianmingqing.oss-cn-hangzhou.aliyuncs.com/aike/image-20220523142424988.png#crop=0&crop=0&crop=1&crop=1&id=PNwVG&originHeight=620&originWidth=1913&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)

选择文件并填写相关信息,点击Upolad:
nexus搭建maven私服 - 图46

出现如下报错:
nexus搭建maven私服 - 图47

这是因为上传的jar包,不符合自定义仓库的 MIME 类型格式。

解决:

  1. 回到仓库管理中,选择自定义仓库,并找到 Storage Strict Content Type Validation:

把打勾的选项(Validate that all content uploaded to this repository is of a MIME type appropriate for the repository format)去掉。
nexus搭建maven私服 - 图48

  1. 保存配置:

nexus搭建maven私服 - 图49

再次上传,出现如下信息则为上传成功:

nexus搭建maven私服 - 图50

查看已上传的 jar 文件:

  1. 点击 上一图片中的 **view it now** ,或者直接点击左边导航栏中的 **Search** ,可以看见 jar 包已经手动上传成功:

nexus搭建maven私服 - 图51

2、自动上传:
主要是指在使用maven项目进行打包操作时,可以配置自定义的nexus仓库ip地址,并上传到该仓库中去,具体步骤如下:

1.修改 maven 的 settings.xml 配置文件:

  1. root@192:/usr/local/java/maven/conf# pwd
  2. /usr/local/java/maven/conf
  3. root@192:/usr/local/java/maven/conf# ls
  4. logging settings.xml toolchains.xml
  5. vim settings.xml #这个文件里面 126行

nexus搭建maven私服 - 图52

添加以下代码到 servers标签中:
也可以 yy 复制上面的

  1. <server>
  2. <id>自定义的Nexus仓库名(如:xxx-nexus)</id>
  3. <username>自定义用户的账号(如:xxx)</username>
  4. <password>自定义用户的密码(如:xxx)</password>
  5. </server>

保存并关闭settings.xml文件。

2. 项目上传 .jar 依赖包 到自定义的Nexus仓库 xxx-nexus :

找到需要上传.jar包的模块中的pom文件(项目全部jar包都要上传,则可以在项目最外层的pom.xml)中加入以下代码到 project 标签下:

  1. <!--远程仓库地址-->
  2. <distributionManagement>
  3. <repository>
  4. <id>xxx-nexus</id>
  5. <name>Xxx Nexus3 Repository</name>
  6. <url>http://自定义仓库ip:8081/repository/xxx-nexus/</url>
  7. </repository>
  8. </distributionManagement>

nexus搭建maven私服 - 图53

打开 IDEA 的 右侧的 Maven Projects 窗口,依次点击 左上角的 reimport图标LifeCycle 下的 deploy

nexus搭建maven私服 - 图54

上传成功:

nexus搭建maven私服 - 图55

maven配置访问nexus私服,从nexus私服下载依赖

方式一、依赖查找顺序:本地仓库——>私服(镜像)——> Maven 中央仓库.
  1. 首先你要先了解这个,**Nexus 后台管理界面** --介绍重点,再文档上面
  2. 我这里讲一下,我之前maven连接自己的私服,遇到的问题,我一开始配置的是自己创建的仓库,发现他是不能直接使用的,要配置仓库组才能使用,这个是我踩过的坑,话不多说上案例
  3. 测试案例需要把你本地maven仓库里面的缓存先备份一下,你构建本地没有这些依赖来,他就会去你的私库里面拿,如果拿到了就证明是成功的。
  1. root@192:/usr/local/java/maven# ls
  2. bin ch conf javax LICENSE NOTICE README.txt repository.bak
  3. boot com io lib net org repository
  4. root@192:/usr/local/java/maven# pwd
  5. /usr/local/java/maven #我的路径

nexus搭建maven私服 - 图56

再把你这些依赖都上传到私库里面,我这里引用的就是下面—内网上传maven依赖到 Nexus 库

nexus搭建maven私服 - 图57

仓库组配置

nexus搭建maven私服 - 图58

1-
nexus搭建maven私服 - 图59

第一步,私服nexus一般会设置鉴权,所以先添加server节点

我的配置文件,我这里是使用的工具是Code.exe - 快捷方式,编辑的maven配置文件,编辑好了直接上传到对应的目录引用,我觉得这样比vim方便一点,你们按照自己熟悉的去编写

/usr/local/java/maven/conf

  1. <server>
  2. <id>nexus</id>
  3. <username>admin</username>
  4. <password>pwd</password>
  5. </server>

nexus搭建maven私服 - 图60

这里需要特别注意id节点的值,这个值和后面很多节点相关联的。
对应的neuxs
nexus搭建maven私服 - 图61

第二部是配置镜像,也就是私服的镜像—重点

重点—mirrorOf标签

mirror都是放到本地settings.xml的中进行配置的,其中的id,name,url和repository没啥两样,特别说说mirrorOf标签:
阿里云的配置模板

  1. <mirror>
  2. <id>nexus-aliyun</id>
  3. <mirrorOf>central</mirrorOf>
  4. <name>Nexus aliyun</name>
  5. <url>http://maven.aliyun.com/nexus/content/groups/public</url>
  6. </mirror>

配置的mirrorOf标签为central,表示任何对于central中央仓库的请求都会被拦截并转发到这个阿里云的maven仓库中

  1. 还有一些其他的写法:
  2. 1. <mirrorOf>*</mirrorOf>使用*号匹配所有的远程仓库。
  3. 2.<mirrorOf>external:*</mirrorOf>匹配所有不在本机上的远程仓库。
  4. 3. <mirrorOf>repo1,repo2</mirrorOf>匹配仓库repo1repo2.
  5. 4. <mirrorOf>*,!repo1</mirrorOf>匹配所有出了repo1之外的远程仓库。
  6. 注意!镜像仓库会完全屏蔽掉被镜像仓库,即镜像仓库失效后,maven不会再去访问被屏蔽掉的仓库。

下面是正常的配置模板

  1. <mirror>
  2. <id>nexus</id>
  3. <mirrorOf>*</mirrorOf>
  4. <name>nexus</name>
  5. <url>http://ip:port/repository/xg_public/</url>
  6. </mirror>

nexus搭建maven私服 - 图62

web页面的仓库地址

nexus搭建maven私服 - 图63

【第二步】在nexus中设置允许匿名下载,如果不允许将不会从私服中下载依赖

nexus搭建maven私服 - 图64

如果私服中没有对应的jar,会去中央仓库下载,速度很慢。可以配置让私服去阿里云中下载依赖。
nexus搭建maven私服 - 图65

注意,这里的id和上面server的id要保持一致,也就是访问这个镜像地址的时候,maven使用哪个server节点的用户名和密码去访问私服,如果没有配置或者id没有匹配上,访问nexus会报错401

第三部是配置profile

在 setting.xml 中配置仓库
在客户端的 setting.xml 中配置私服的仓库,由于 setting.xml 中没有 repositories 的配置标签,需要使用 profile 定义仓库。

  1. <profile>
  2. <id>nexus</id>
  3. <repositories>
  4. <repository>
  5. <id>central</id>
  6. <url>http://central</url>
  7. <releases><enabled>true</enabled></releases>
  8. <snapshots><enabled>true</enabled></snapshots>
  9. </repository>
  10. </repositories>
  11. <pluginRepositories>
  12. <pluginRepository>
  13. <id>central</id>
  14. <url>http://central</url>
  15. <releases><enabled>true</enabled></releases>
  16. <snapshots><enabled>true</enabled></snapshots>
  17. </pluginRepository>
  18. </pluginRepositories>
  19. </profile>

配置文件详解
nexus搭建maven私服 - 图66

我的配置如下

nexus搭建maven私服 - 图67

注意,这里profile的id和上面镜像的id需要一致,也就是说,这个profile配置的仓库去哪个镜像下载。repository里面的url不重要,应为始终都要去镜像里面下载,镜像有地址了。

最后一步就是配置指定哪个profile生效

使用 profile 定义仓库需要激活才可生效

  1. <activeProfiles>
  2. <activeProfile>nexus</activeProfile>
  3. </activeProfiles>

nexus搭建maven私服 - 图68

对应
nexus搭建maven私服 - 图69

完成测试

我这里是直接到项目下面打包测试了一下
nexus搭建maven私服 - 图70

  1. mvn clean package install -Dmaven.test.skip=true -DarchetypeCatalog=local -X

测试结果是成功
nexus搭建maven私服 - 图71

也可以直接使用jenkins直接构建
nexus搭建maven私服 - 图72

内网上传maven依赖到 Nexus 库

1.下载依赖到本地

首先将业务系统所需要的依赖获取到,放到本地的某个文件夹。为了省事,可以直接将maven的 repository 下的所有依赖全部拷贝出来,放入固定文件夹(d: //repository)

2.将依赖上传

在目标系统下,创建文件夹,用来存放d: //repository/ 下的文件,比如穿件/home/repository/,使用xshell 工具将d: //repository/ 下的文件 全部放入到 /home/repository/ 下

3.创建推送脚本

推送脚本mavenInstall.sh 主要是使用命令将/home/repository/ 的文件都推送到Nexus去,在/home/repository/ 下创建 mavenInstall.sh ,具体写法如下:

  1. #/bin/bash
  2. #
  3. #
  4. while getopts ":r:u:p:" opt; do
  5. case $opt in
  6. r) REPO_URL="$OPTARG"
  7. ;;
  8. u) USERNAME="$OPTARG"
  9. ;;
  10. p) PASSWORD="$OPTARG"
  11. ;;
  12. esac
  13. done
  14. find . -type f -not -path './mavenimport\.sh*' -not -path '*/\.*' -not -path '*/\^archetype\-catalog\.xml*' -not -path '*/\^maven\-metadata\-local*\.xml' -not -path '*/\^maven\-metadata\-deployment*\.xml' | sed "s|^\./||" | xargs -I '{}' curl -u "$USERNAME:$PASSWORD" -X PUT -v -T {} ${REPO_URL}/{};

一定要注意编码,linux 和windows 的编码格式,会导文件执行出错。

4.编写执行命令

首先安装 curl

  1. aptitude -y install curl
  1. 执行命令的书写如下所示:
  2. 写法:
  3. ./mavenInstall.sh -u 用户名 -p 密码 -r 创库地址
  4. 样例:
  5. ./mavenInstall.sh -u root -p root!@# -r http://192.128.170.1:8081/repository/demo-repo/

上传过程

nexus搭建maven私服 - 图73

上传完成打开neuxs查看

nexus搭建maven私服 - 图74

此文章参考的这个大佬,我的有点不一样,但是整个过程都是差不多的
大佬一

[https://blog.csdn.net/weixin_42585386/article/details/122108563?ops_request_misc=&request_id=&biz_id=102&utm_term=linuxx操作系统nexus下载教程&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-1-122108563.142v10control,157v4control&spm=1018.2226.3001.4187]:

大佬二

[https://www.cnblogs.com/xiaomaomao/p/14170993.html]: