Maven 私服 Nexus 3.44 搭建

news2024/9/24 11:32:05

文章目录

  • 1. 安装 Nexus
  • 2. Nexus 程序
    • 2.1. 启动 nexus 程序,添加运行参数 start
    • 2.2. 查看 nexus 程序运行状态,添加运行参数 status
    • 2.3. 停止 nexus 程序,添加运行参数 stop
  • 3. 浏览器访问 Nexus GUI
    • 3.1. 默认端口
    • 3.2. 自定义端口
    • 3.3. 初次登录,并修改密码
  • 4. Nexus GUI 中的仓库和仓库类型
    • 4.1. proxy - 可连公网仓库的类型
    • 4.2. hosted - 保存上传的依赖的类型
    • 4.3. group - 聚合仓库类型
    • 4.4. 创建仓库
    • 4.5. 查看仓库中的依赖
    • 4.6. 查看私服中的仓库地址
  • 5. 从私服中的仓库下载依赖
    • 5.1. 方式一:配置镜像
    • 5.2. 方式二:设置仓库信息
  • 6. 将项目打包后上传到私服中的仓库

Nexus 是用来搭建 Maven 私服的,换句话说就是公司专用的 Maven 仓库,Nexus 3.x 版本的官网下载地址

个人认为下面两种场景比较适合使用私服:

1. 公司只有服务器允许访问外网,员工机器禁止访问外网,此时员工机器无法从 Maven 公服远程仓库更新依赖

2. 项目中很多需要引入的依赖是公司自己开发的,Maven 公服远程仓库中没有,所以无法下载

Nexus 有 LInux 版本和 Windows 版本,本文演示的是 Linux 版本,具体版本为 nexus-3.44.0-01-unix


1. 安装 Nexus

将下载好的 Nexus 安装包通过 FTP 工具上传到 Linux,我个人比较喜欢使用的 FTP 工具是 MobaXterm,上传后,在 Nexus 存放目录中运行 tar -zxvf nexus-3.44.0-01-unix.tar.gz 解压 Nexus 安装包,解压后目录结构如下:

解压后结构

2. Nexus 程序


Nexus 程序的存放路径为 Nexus 主程序/bin/nexus, 运行 nexus 程序时需要指定运行参数,常见的参数有三个

2.1. 启动 nexus 程序,添加运行参数 start

启动 nexus 程序,以本文为例,命令为:sh nexus-3.44.0-01/bin/nexus start,运行后界面如下:

运行 nexus


2.2. 查看 nexus 程序运行状态,添加运行参数 status

启动 nexus 后,查看是否启动成功,以本文为例,命令为:sh nexus-3.44.0-01/bin/nexus status,运行后界面如下:

查看是否启动成功

2.3. 停止 nexus 程序,添加运行参数 stop

停止 nexus 程序,以本文为例,命令为:sh nexus-3.44.0-01/bin/nexus stop,运行后界面如下:

请添加图片描述

3. 浏览器访问 Nexus GUI


查看 Nexus 状态为成功启动后,就可以通过浏览器来访问 Nexus GUI,在 GUI 中可以对 Nexus 私服进行配置,但是访问前,我们需要先将防火墙关闭,否则容易出现无法访问的情况,关闭防火墙命令:systemctl stop firewalld

3.1. 默认端口

Nexus GUI 程序的默认访问端口为 8081,以本文为例,浏览器地址为 http://192.168.3.88:8081

默认端口访问GUI

3.2. 自定义端口


想自定义 Nexus GUI 程序的端口,需要修改 Nexus 辅助程序/nexus3/etc/nexus.properties 文件,如果从未运行过 Nexus 程序,那么这个文件是不存在的,需要我们手动添加,如果运行过 Nexus 程序,那么这个文件就会被自动创建,此时直接修改文件内容即可

文件中通过 application-port=端口号 来指定端口号,以本文为例,因为我已经运行过 Nexus 程序了,所以 nexus.properties 文件就不需要手动创建了,直接通过 vim sonatype-work/nexus3/etc/nexus.properties 修改:

修改端口

修改后,重新启动 nexus 程序,然后通过自定义端口访问 Nexus GUI 程序,http://192.168.3.88:8088

nexus 自定义端口

3.3. 初次登录,并修改密码

前面访问 Nexus GUI 后,画面中没有任何内容,这是因为我们还未登录,没有权限,第一次登陆时,用户名默认为 admin,对应的密码保存在 Nexus 辅助程序/nexus3/admin.password

首次登陆

用默认的用户名和密码登陆后,会让我们自己重新设置一下密码

密码重置

4. Nexus GUI 中的仓库和仓库类型


Nexus 中的仓库类型有很多,需要我们关注的主要有三个,proxy、hosted、group

4.1. proxy - 可连公网仓库的类型

可连公网的仓库,这个类型的仓库创建时,需要设置一个公网仓库的地址,当我们本地的 Maven 访问 proxy 仓库时,如果需要的依赖不在 proxy 仓库中,则会从设置的公网仓库中下载,下载后保存到 proxy 仓库中,然后再返还给本地 Maven,流程类似下图:

proxy仓库流程

Nexus 默认提供的 proxy 仓库

Nexus 默认提供了一个名字为 maven-central 的 proxy 仓库,如下图

默认的proxy仓库

我们可以通过点击名字对该仓库的设置进行修改:

设置默认的proxy仓库

通过地址我们可以看出,这个 proxy 仓库的远端公网仓库是 maven 的官方仓库,我们也可以将这个公网仓库地址换为阿里云仓库,从而提升下载速度 https://maven.aliyun.com/repository/public


4.2. hosted - 保存上传的依赖的类型

hosted 仓库 和 proxy 仓库截然相反,proxy 仓库中的内容是从公网仓库下载下来的,而 hosted 仓库中的内容通常是我们本地 Maven 上传上来的,流程类似下图:

hosted流程

hosted 仓库,常见场景就是,公司中的某一个小组开发好一个组件后上传到 hosted 仓库,然后另一个小组想使用这个组件时,就可以在 hosted 仓库下载

hosted 仓库的内部又分两种类型,一个是发布库,一个是快照库,在创建 hosted 仓库时通过 Version policy 选项设置,这个目的就是对上传的组件进行更好的归类


Nexus 默认提供了两个 hosted 仓库

Nexus 默认提供了两个 hosted 仓库,一个是名字为 maven-releases 的发布库,一个是名字为 maven-snapshots 的快照库

hosted默认的仓库


同样点击名字就可以对 hosted 仓库进行修改,我们以 maven-releases 仓库为例:

发布库

4.3. group - 聚合仓库类型

当我们项目中的依赖既需要从 proxy 仓库下载,又需要从 hosted 仓库下载,那么就需要在本地 Maven 的 settings.xml 中设置两个远端仓库,分别指向私服中的 proxy 仓库和 hosted 仓库,这就很麻烦。而 nexus 中 group 仓库的作用,就是指定多个 nexus 中已有的仓库,将它们聚合到一起

如下图,我们可以创建一个 group 仓库,然后将 hosted 仓库和 proxy 仓库聚合到一起,这样本地 Maven 的 settings.xml 中,只需要将 group 仓库设置为远端仓库就可以了,不需要设置多次

group仓库


Nexus 默认提供了一个 group 仓库

Nexus 默认提供了一个名字为 maven-public 的 group 仓库

默认的group仓库

点击仓库名字可以查看或修改配置,从配置中可以看到,默认的 group 仓库中聚合了三个已有仓库:

group仓库配置

4.4. 创建仓库

不管创建什么类型的仓库,入口都是一样的,如下图:

创建仓库

点击后,我们可以选择要创建的仓库类型,下图红框中的就是上面说的 proxy、hosted、group:

选择仓库类型

仓库类型选择完后,是对该类型的仓库进行详细设置,此处就不举例了,可参照 Nexus 提供的默认仓库的配置

4.5. 查看仓库中的依赖

查看仓库中的依赖,入口如下图:

查看仓库
然后点击仓库名就可以查看这个仓库中已有的依赖,如果仓库是 hosted 类型,点进去后还可以上传依赖,都是傻瓜式操作,就不介绍了,进去一看就明白了

4.6. 查看私服中的仓库地址


不管是从私服的仓库下载依赖或将项目包上传到私服的仓库,首先得知道私服中仓库的地址,地址查找方式如下:

请添加图片描述

5. 从私服中的仓库下载依赖


从私服中的仓库下载依赖有两种方式:

  • 配置镜像:配置镜像后,Maven 会拦截访问远端仓库的请求,将目标地址变更为私服中仓库的地址后再请求
  • 配置仓库信息:配置仓库信息,并将仓库路径指向私服中的仓库,需要更新依赖时,直接去私服中的仓库

5.1. 方式一:配置镜像


很多文章说这种方式不会下载 hosted 库中快照库的模块,其实下载与否,取决于我们拦截的仓库,其仓库信息中是否配置了允许更新快照库,如果配置允许更新快照库,那么是可以正常下载的,只不过我们通常都是对 Maven 默认的中央仓库 central 进行镜像,而在超级POM中,这个仓库的仓库信息中设置了不允许访问快照库,所以我们通过镜像就无法更新快照库的模块

以私服中默认的 group 仓库为例,在 Maven 的 settings.xml 中添加如下代码:

<!-- 设置登录权限 -->
<servers>
  <server>
    <id>ares5k-Nexus</id>
    <username>admin</username>
    <password>root</password>
  </server>
</servers>

<mirrors>
  <!-- mirrorOf 是要拦截的仓库,使用通配符 *,代表对所有的仓库都进行拦截,实际使用时可以根据项目情况更改 -->
  <mirror>
    <id>ares5k-Nexus</id>
    <name>my nexus</name>
    <mirrorOf>*</mirrorOf>
    <url>http://192.168.3.88:8081/repository/maven-public/</url>
  </mirror>
</mirrors>

说一下上面配置中比较重要的部分,其中 <server> 节点是设置登录密码的,<server.id> 必须与 <mirror.id> 相同,这样私服才能成功访问(如果私服没有设置访问权限,这里 <server> 部分可以省略),其他的想了解更多可以看我关于 settings.xml 的文章

5.2. 方式二:设置仓库信息

设置仓库信息,并将仓库的地址设置为私服中仓库的地址,但是使用这种方式时,一定要设置两份,一份是下载依赖时使用的,一份是下载插件时使用的

当我们的私服需要授权认证时,要先在 settings.xml 中添加登录密码:

<!-- 设置登录权限 -->
<servers>
  <server>
    <id>ares5k-Nexus</id>
    <username>admin</username>
    <password>root</password>
  </server>
</servers>

然后设置仓库信息,有两个地方可以设置仓库信息,一个是 pom.xml 中,一个是 settings.xml<profile> 中,在 <profile> 中设置仓库信息时,不要忘了设置 <profile> 的激活状态,否则配置不会生效

<!-- 私服仓库 - 更新依赖时使用 -->
<repositories>
  <repository>
    <id>ares5k-Nexus</id>
    <name>my nexus</name>
    <url>http://192.168.3.88:8081/repository/maven-public/</url>
    <!-- 允许在快照库下载 -->
    <snapshots>
      <enabled>true</enabled>
    </snapshots>
    <!-- 允许在发布库下载 -->
    <releases>
      <enabled>true</enabled>
    </releases>
  </repository>
</repositories>

<!-- 私服仓库 - 更新插件时使用 -->
<pluginRepositories>
  <pluginRepository>
    <id>ares5k-Nexus</id>
    <name>Central Repository</name>
    <url>http://192.168.3.88:8081/repository/maven-public/</url>
    <!-- 允许在快照库下载 -->
    <snapshots>
      <enabled>true</enabled>
    </snapshots>
    <!-- 允许在发布库下载 -->
    <releases>
      <enabled>true</enabled>
    </releases>
  </pluginRepository>
</pluginRepositories>

不要忘了 <server.id><repository.id>、<pluginRepository.id> 要相同

6. 将项目打包后上传到私服中的仓库

1. 在 pom.xml 指定要上传的私服仓库,配置如下:

<!-- 工程坐标 -->
<groupId>com.ares5k</groupId>
<artifactId>ares5k-package</artifactId>
<!-- version 中有 SNAPSHOT 字眼时会上传到快照库,否则上传到发布库 -->
<version>1.0</version>

<!-- 设置上传信息 -->
<distributionManagement>
  <!-- 发布库,私服中 hosted 仓库的 Version policy 必须是 release -->
  <repository>
    <id>ares5k-release</id>
    <url>http://192.168.3.88:8081/repository/maven-releases/</url>
  </repository>
  <!-- 快照库,,私服中 hosted 仓库的 Version policy 必须是 snapshot  -->
  <snapshotRepository>
    <id>ares5k-snapshot</id>
    <url>http://192.168.3.88:8081/repository/maven-snapshots/</url>
  </snapshotRepository>
</distributionManagement>

2. 在 settings.xml 中追加私服中仓库的登录信息 <repository.id>、<snapshotRepository.id> 必须和 <server.id> 相同:

<servers>
  <!-- 发布库权限信息 -->
  <server>
    <id>ares5k-release</id>
    <username>admin</username>
    <password>root</password>
  </server>
  <!-- 快照库权限信息 -->
  <server>
    <id>ares5k-snapshot</id>
    <username>admin</username>
    <password>root</password>
  </server>
</servers>

3. 运行 mvn deploy 后就会将项目打包并上传到对应的仓库中,以上述配置为例,因为工程坐标的 <version> 中没有 SNAPSHOT 字眼,所以会将项目打包上传到 <id>ares5k-release</id> 配置的私服仓库中

其他项目组想使用我们的模块时,他们必须根据我们上传的仓库来配置他们的仓库信息(允许快照库或发布库下载)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/510351.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

安全从业人员职业发展和规划

文章来源于owasp&#xff0c;分享嘉宾t0data。 1、为什么做这次分享&#xff1f; 2、人生周期三模型 3、职业生涯阶段划分 4、通用职业发展路径 5、当前安全行业前景如何&#xff1f; 6、安全就业行情如何&#xff1f; 7、安全行业就业市场岗位划分 8、什么是相对比较好的履历…

如何系统全面的自学自动化测试?明确后我直接拿到了20K

玩自动化测试多年的老司机带你上车全面系统学习自动化测试&#xff0c;并且还能教你如何学习才能在今年拿到一份不错的offer。 说到系统全面&#xff0c;就是以目前绝大部分公司招聘要求的知识内容为基准&#xff0c;毕竟我们学习自动化测试都是为了高薪工作&#xff0c;《史记…

【异步电机系列】电机参数离线辨识(含源码实现)

【一、闲话 很久没有认真更新自己的博客了&#xff01;正好这段时间在学习异步电机控制&#xff0c;所以把过程中的一些东西写下来&#xff0c;当是回顾也是备忘。本来想是把整个过程的问题和收获都记录下来的&#xff08;包括硬件设计、mcu控制、算法等&#xff09;&#xff0…

FFT变换后得到什么?

FFT FFT 快速傅里叶变换&#xff0c;是利用计算机计算DFT的高效、快速计算的方法的统称。 将信号从时域变换到频域范围内。 matlab中的fft 语法&#xff1a; Y fft(X) Y fft(X,n) Y fft(X,n,dim)说明 Y fft(X) 用快速傅里叶变换 (FFT) 算法计算 X 的离散傅里叶变换 (D…

ApiPost简单使用

目录 环境与变量 设置与使用 随机参数变量 内置Mock字段随机参数 自定义随机参数 全局参数 使用手册 apipost可支持一键压测和自动化接口测试 环境与变量 设置与使用 设置 环境变量可设置环境名称、变量名称、变量初始值、URL&#xff1a; 可以在请求变量或者接口 URL…

《精英的傲慢:好的社会该如何定义成功》笔记与摘录二

目录 ​编辑 笔记与摘录 1、阶层跃升的话语 2、优绩至上理念的核心 3、优绩为什么重要 4、不平等是制度的失败&#xff0c;还是你的失败&#xff1f; 5、一种思考什么样的社会是公正的社会的方法 6、赚很多钱意味着什么 7、当市场价值被看作社会贡献的代表后 8、当市…

FS7M0880YDTU专为离线SMPS设计,VN7040AJTR和VN7016AJTR器件是用于汽车转向指示器

FS7M0880YDTU 是专门为离线SMPS设计的&#xff0c;具有最小的外部组件。该Power Switch(FPS)器件由高压功率SenseFET和电流模式PWM控制器IC组成。PWM控制器包括集成固定振荡器、欠压锁出、前缘消隐块、优化栅极通/关断驱动器、热关断保护、过压保护、用于环路补偿的温度补偿精密…

开源项目九死一生,但很多程序员坚持开源??

大家好&#xff0c;欢迎来到停止重构的频道。 本期我们讨论一个开放问题。 为什么流行的开源项目只是凤毛麟角&#xff0c;且很多有名的开源项目都是背靠大公司的。 但是&#xff0c;为什么还有很多个人开发者愿意开源项目呢&#xff1f; 欢迎大家把自己的想法或开源项目发…

实现一个简单的前端脚手架

核心要点 前端脚手架概念实现前端脚手架 什么是前端脚手架&#xff1f; 随着前端工程化的概念越来越深入人心&#xff0c;脚手架应运而生。简单来说&#xff0c;「前端脚手架」就是指通过选择几个选项快速搭建项目基础代码的工具 前端脚手架可帮我们做什么&#xff1f; 可…

fine tune openAI model ( 微调chatgpt)

了解如何为自己的应用程序定制模型。 介绍 微调可以从API提供的模型中获得更多信息&#xff1a; 比 prompt 设计更高质量的结果能够在超过 prompt 范围的示例上进行训练更短的 prompt 节省了token更低的延迟请求 微调包括以下步骤&#xff1a; 准备并上传训练数据训练一个…

【异常解决】vim编辑文件时提示 Found a swap file by the name “.start.sh.swp“的解决方案

vim编辑文件时提示 Found a swap file by the name ".start.sh.swp"的解决方案 一、问题描述二、原因说明三、解决方案3.1 方案1 删除即可3.2 方案2 禁止生成swp文件 一、问题描述 vim编辑文件时提示 Found a swap file by the name “.start.sh.swp”&#xff0c;如…

周杰伦、张韶涵巡演重磅回归,联诚发LED屏幕燃爆全场!

灯光点亮&#xff0c;音乐响起&#xff0c;所有粉丝随着节奏开始疯狂摇摆呐喊。2023年&#xff0c;随着演出市场全面复苏&#xff0c;各大活动演出随处可见&#xff0c;众多歌手也重新回归舞台&#xff0c;开启世界巡回演唱会活动&#xff0c;周杰伦、张韶涵等重磅明星纷纷进行…

6 接口、多态、断言、项目【Go语言教程】

6 接口、多态、断言、项目【Go语言教程】 1 接口 1.1 概念 Golang 中 多态特性主要是通过接口来体现的。 interface 类型可以定义一组方法&#xff0c;但是这些不需要实现。并且 interface 不能包含任何变量。到某个自定义类型(比如结构体 Phone)要使用的时候,在根据具体情况…

Jupyter Notebook为什么适合数据分析?

Jupyter Notebook 是一个 Web 应用程序&#xff0c;便于创建和共享文学化程序文档&#xff0c;支持实时代码、数学方程、可视化和 Markdown&#xff0c;其用途包括数据清理和转换、数值模拟、统计建模、机器学习等等。目前&#xff0c;数据挖掘领域中最热门的比赛 Kaggle 里的资…

数据结构与算法基础(王卓)(37):选择排序(简单选择、堆排序)

目录 简单选择排序 堆排序 堆的调整&#xff1a; 大根堆 小根堆 整个堆调整的完整工序如下&#xff1a; 根据按照操作对程序注解标注&#xff1a;&#xff08;看过了注解就知道程序他每一步是怎么操作的了&#xff09; 堆的建立 问题 简单选择排序 #include<iostre…

Feign踩坑源码分析--@FeignClient注入容器

一. EnableFeignClients 1.1.类介绍 从上面注释可以看出是扫描声明了FeignClient接口的类&#xff0c;还引入了 FeignClientsRegistrar类&#xff0c;从字面意思可以看出是进行了 FeignClient 客户端类的注册。 1.2.FeignClientsRegistrar 详解 最主要的一个方法&#xff1a;re…

喜报丨酷雷曼荣膺最佳创新品牌价值奖

2023年4月&#xff0c;“元力觉醒新浪VR 2022年度行业奖项”颁奖盛典成功举行&#xff0c;酷雷曼VR&#xff08;北京同创蓝天云科技有限公司&#xff09;荣获“最佳创新品牌价值奖”荣誉称号&#xff01; 本次大会由元宇宙产业的权威门户媒体新浪VR主办&#xff0c;中国民协元…

从入门到精通:网络爬虫开发实战总结

从入门到精通&#xff1a;网络爬虫开发总结 专栏&#xff1a;Python网络爬虫1.认识网络爬虫2.网络爬虫——HTML页面组成3.网络爬虫——Requests模块get请求与实战4.网络爬虫—Post请求(实战演示)5.网络爬虫——Xpath解析6.网络爬虫——BeautifulSoup详讲与实战7.网络爬虫—正则…

网络原理(五):IP 协议

目录 认识IP 地址 子网掩码 作用 动态分配IP 地址 NAT 机制 认识MAC地址 MAC地址如何工作 认识IP 地址 概念&#xff1a; IP地址&#xff08;Internet Protocol Address&#xff09;是指互联网协议地址&#xff0c;又译为网际协议地址。 作用&#xff1a; IP地址是I…

遗传算法(GA)

理论&#xff1a; 遗传算法是一种通过模拟生物进化的方式来寻找最优解的一类优化算法。这种算法主要依靠遗传、突变和自然选择的机制对问题求解进行高效的迭代搜索。 遗传算法的基本思想是将问题的解表示成一个个个体&#xff0c;然后根据适应度函数的定义来评估每个个体的适…