【Maven】nexus 配置私有仓库配置【转】

news2025/1/11 16:56:20

介绍:【Maven】Nexus几个仓库的介绍-CSDN博客

一、仓库类型

  1. proxy 远程仓库的代理,比如说nexus配置了一个central repository的proxy,当用户向这个proxy请求一个artifact的时候,会现在本地查找,如果找不到,则会从远程仓库下载,然后返回给用户。
  2. hosted 宿主仓库,用户可以把自己的一些仓库deploy到这个仓库中
  3. group 仓库组,是nexus特有的概念,目的是将多个仓库整合,对用户暴露统一的地址,这样就不需要配置多个仓库地址。

比如默认生成的 central 仓库,是一个 proxy 类型的仓库,代理的是默认的 maven 中央仓库

image

而默认的 public 仓库则是一个 group 类的仓库

image

二、仓库创建

1. 阿里仓库的代理

image

2. 自己的 release 仓库

image

3. 自己的 snapshot 仓库

image

4. 组合仓库

这里直接利用自动创建的 public 仓库,去掉原有的 release 和 snapshot 仓库,release(s)和snapshot(s)可参考自动生成的那两个仓库名称,我的没加s,懒得处理了

image

三、用户创建

可直接跳过,使用默认的 admin 用户

1. 角色

权限略,直接根据已有权限创建角色

image

会发现我们自己创建的仓库也会自动创建相关权限数据,那么具有 group 的仓库的权限是否就获得其内部各仓库的相应权限呢,下面是对 public(release)添加除删除外的权限(我想还去除更新但保留新增不行吗?)和snapshot仓库的全部权限
这里是有点问题的,可直接拉 Create Role 的最下面添加匿名用户的 role,这样就可以访问了,但是推送API之类的不行,下面直接添加对应仓库的 read 权限最终是下载不了的

image

2. 创建一个开发用户

image


创建用户并关联角色,注意密码是用户密码而非邮箱密码

image

四、maven 配置

1. 密码加密

官方说明:Password Encryption – Maven
这里的 Master password 是生成密钥的种子?还是什么?

PS C:\Users\??\Desktop\tmp\untitled> mvn --encrypt-master-password
Master password: 
{cK3TV5Ba/wUHu/qCTE/Cs7fTZCo6ZIe8oLCRaQnErN7BO+u/7Xppi4uiCqLETsv4}

在 .m2 目录下创建文件 settings-security.xml,内容如下

<settingsSecurity>
  <master>{cK3TV5Ba/wUHu/qCTE/Cs7fTZCo6ZIe8oLCRaQnErN7BO+u/7Xppi4uiCqLETsv4}</master>
</settingsSecurity>

然后对我们上面的 dev-user 密码进行加密,下面输入的 Password 即为 dev-user 的明文密码,应该是使用上面生成的密钥对明文进行加密

PS C:\Users\??\Desktop\tmp\untitled> mvn --encrypt-password
Password: 
{EJ0L8XOtDRIHdffd85KgqbvFnpnxzAhaM5kJafGDB0Q=}

然后在setting.xml文件中进行配置,主要是 servers 节点(有个疑问,server的id是否需要和下面配置的repository的id一致,应该要一致吧,不然怎么知道访问是使用哪个密码呢)
下面包含了 repository 的设置和 pluginRepository 的设置。

  <servers>
    <server>
      <id>maven-public</id>
      <username>user-dev</username>
      <password>{EJ0L8XOtDRIHdffd85KgqbvFnpnxzAhaM5kJafGDB0Q=}</password>
    </server>
    <server>
      <id>maven-release</id>
      <username>user-dev</username>
      <password>{EJ0L8XOtDRIHdffd85KgqbvFnpnxzAhaM5kJafGDB0Q=}</password>
    </server>
    <server>
      <id>maven-snapshot</id>
      <username>user-dev</username>
      <password>{EJ0L8XOtDRIHdffd85KgqbvFnpnxzAhaM5kJafGDB0Q=}</password>
    </server>
  </servers>

  <profiles>
    <profile>
      <id>maven-repository</id>

      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>

      <repositories>
  <profiles>
    <profile>
      <id>maven-repository</id>

      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>

      <repositories>
        <repository>
          <id>maven-public</id>
          <name>maven-public</name>
          <url>http://192.168.31.120:8081/repository/maven-public/</url>
          <snapshots>
			<enabled>true</enabled>
			<updatePolicy>always</updatePolicy>
		  </snapshots>
		  <releases>
			<enabled>true</enabled>
			<updatePolicy>always</updatePolicy>
		  </releases>
        </repository>
        <repository>
          <id>maven-release</id>
          <name>maven-public</name>
          <url>http://192.168.31.120:8081/repository/maven-project-release/</url>
          <snapshots>
			<enabled>false</enabled>
		  </snapshots>
		  <releases>
			<enabled>true</enabled>
			<updatePolicy>always</updatePolicy>
		  </releases>
        </repository>
        <repository>
          <id>maven-snapshot</id>
          <name>maven-snapshot</name>
          <url>http://192.168.31.120:8081/repository/maven-project-snapshot/</url>
          <snapshots>
			<enabled>true</enabled>
			<updatePolicy>always</updatePolicy>
		  </snapshots>
		  <releases>
			<enabled>false</enabled>
		  </releases>
        </repository>
      </repositories>
	  <pluginRepositories>
		<pluginRepository>
          <id>maven-public</id>
          <url>http://192.168.31.120:8081/repository/maven-public/</url>
        </pluginRepository>
	  </pluginRepositories>
    </profile>
  </profiles>
  </profiles>

注意:setting.xml 中需要去掉下面的配置,这个默认的镜像拦截

    <mirror>
      <id>maven-default-http-blocker</id>
      <mirrorOf>external:http:*</mirrorOf>
      <name>Pseudo repository to mirror external repositories initially using HTTP.</name>
      <url>http://0.0.0.0/</url>
      <blocked>true</blocked>
    </mirror>

五、尝试maven项目

IDEA 创建 maven 项目加载后,不知道是否访问了我们的仓库,不知道上面的配置是否生效

  1. 关闭 nexus 的匿名访问

    image

  2. IDEA 创建项目后停止 IDEA 的处理(IDEA右下角),删除本地仓库的数据,使用命令行 mvn -X 的 -X 开启 debug 日志,查看下载是否走配置的私服

  3. nexus 查看是否有依赖数据

六、踩坑

1. 权限问题

就是上面所说的 Role 问题,仅赋予角色对应仓库的 Read 等权限,最终 maven 拉取依赖会报 403,如下图 maven 的 debug 日志,已经优先从私服拉取了,但是拉取失败(maven 的 debug 日志并未说明是什么错误,需要到 shell 到 nexus 服务器打印访问日志)

image

image

深入待处理 OR 不处理,反正也是自己用

2. 私服拉取失败

和上面差不多,最开始我以为打印了私服的日志就是成功了的,但是实际从私服拉取数据失败它是不会报错的,当然推送API等的时候失败就会报错了,我就是配置用户名配置错误了,倒是失败的,直到我到 nexus 查询发现没有依赖包数据,才发现有问题,正确拉取到数据如下,是有文件总大小和网络下载速度的。

image

3. 默认镜像

maven 的 settings.xml 中是有一个默认镜像配置的,这个应该是所有的 http 请求(非https)会被处理转发到中央仓库的,而非配置的私服,需要注释掉

image

image

分类: 虚拟化(linux、vm、docker)

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

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

相关文章

3C产品说明书电子化转变:用户体验、环保与商业机遇的共赢

在科技日新月异的当代社会&#xff0c;3C产品&#xff08;涵盖计算机类、通信类和消费类电子产品&#xff09;已成为我们日常生活中不可或缺的重要元素。与此同时&#xff0c;这些产品的配套说明书也经历了一场从纸质到电子化的深刻变革。这一转变不仅体现了技术的飞速进步&…

【YOLOv8】安卓端部署-2-项目实战

文章目录 1 准备Android项目文件1.1 解压文件1.2 放置ncnn模型文件1.3 放置ncnn和opencv的android文件1.4 修改CMakeLists.txt文件 2 手机连接电脑并编译软件2.1 编译软件2.2 更新配置及布局2.3 编译2.4 连接手机 3 自己数据集训练模型的部署4 参考 1 准备Android项目文件 1.1…

虚拟网卡驱动和DM9000C移植

网卡驱动程序框架 网卡驱动程序“收发功能”&#xff1a; 只要把上层的数据发给网卡&#xff0c;从网卡来的数据构造成包给上层即可。网卡只需要 “socket”编程&#xff0c;不需要打开某设备。 驱动程序都是以面向对象的思想写的&#xff0c;都有相关的结构体。 编程步骤 …

Vue3 + Vite 项目引入 Typescript

文章目录 一、TypeScript简介二、TypeScript 开发环境搭建三、编译方式1. 自动编译单个文件2. 自动编译整个项目 四、配置文件1. compilerOptions基本选项严格模式相关选项&#xff08;启用 strict 后自动包含这些&#xff09;模块与导入相关选项 2. include 和 excludeinclude…

Cyberchef使用功能之-多种压缩/解压缩操作对比

cyberchef的compression操作大类中有大量的压缩和解压缩操作&#xff0c;每种操作的功能和区别是什么&#xff0c;本章将进行讲解&#xff0c;作为我的专栏《Cyberchef 从入门到精通教程》中的一篇&#xff0c;详见这里。 关于文件格式和压缩算法的理论部分在之前的文章《压缩…

Istio分布式链路监控搭建:Jaeger与Zipkin

分布式追踪定义 分布式追踪是一种用来跟踪分布式系统中请求的方法&#xff0c;它可以帮助用户更好地理解、控制和优化分布式系统。分布式追踪中用到了两个概念&#xff1a;TraceID 和 SpanID。 TraceID 是一个全局唯一的 ID&#xff0c;用来标识一个请求的追踪信息。一个请求…

Linux修改/etc/hosts不起作用(ping: xxx: Name or service not known)的解决方法——开启NSCD

​ 问题描述 起因是我在实验室云资源池的一台虚拟机&#xff08;CentOS 8.5&#xff09;上的/etc/hosts文件中为Fabric网络节点的域名指定了IP&#xff1a; IP可以ping通&#xff0c;但是ping域名时提示ping: xxx: Name or service not known。 问题本身应该是Linux通用的&a…

Python中Tushare(金融数据库)入门详解

文章目录 Python中Tushare&#xff08;金融数据库&#xff09;入门详解一、引言二、安装与注册1、安装Tushare2、注册与获取Token 三、Tushare基本使用1、设置Token2、获取数据2.1、获取股票基础信息2.2、获取交易日历2.3、获取A股日线行情2.4、获取沪股通和深股通成份股2.5、获…

【网络】网络抓包与协议分析

网络抓包与协议分析 一. 以太网帧格式分析 这是以太网数据帧的基本格式&#xff0c;包含目的地址(6 Byte)、源地址(6 Byte)、类型(2 Byte)、数据(46~1500 Byte)、FCS(4 Byte)。 Mac 地址类型 分为单播地址、组播地址、广播地址。 单播地址&#xff1a;是指第一个字节的最低位…

RabbitMQ的工作队列在Spring Boot中实现(详解常⽤的⼯作模式)

上文着重介绍RabbitMQ 七种工作模式介绍RabbitMQ 七种工作模式介绍_rabbitmq 工作模式-CSDN博客 本篇讲解如何在Spring环境下进⾏RabbitMQ的开发.&#xff08;只演⽰部分常⽤的⼯作模式&#xff09; 目录 引⼊依赖 一.工作队列模式 二.Publish/Subscribe(发布订阅模式) …

python学习_3.正则表达式

来源:B站/麦叔编程 1. 正则表达式的7个境界 假设有一段文字&#xff1a; text 身高:178&#xff0c;体重&#xff1a;168&#xff0c;学号&#xff1a;123456&#xff0c;密码:9527要确定文本中是否包含数字123456&#xff0c;我们可以用in运算符&#xff0c;也可以使用inde…

Python学习------第十天

数据容器-----元组 定义格式&#xff0c;特点&#xff0c;相关操作 元组一旦定义&#xff0c;就无法修改 元组内只有一个数据&#xff0c;后面必须加逗号 """ #元组 (1,"hello",True) #定义元组 t1 (1,"hello") t2 () t3 tuple() prin…

nodejs基于微信小程序的云校园的设计与实现

摘 要 相比于传统的校园管理方式&#xff0c;智能化的管理方式可以大幅提高校园的管理效率&#xff0c;实现了云校园管理的标准化、制度化、程序化的管理&#xff0c;有效地防止了云校园信息的不规范管理&#xff0c;提高了信息的处理速度和精确度&#xff0c;能够及时、准确地…

Excel——宏教程(精简版)

一、宏的简介 1、什么是宏&#xff1f; Excel宏是一种自动化工具&#xff0c;它允许用户录制一系列操作并将其转换为VBA(Visual Basic for Applications)代码。这样&#xff0c;用户可以在需要时执行这些操作&#xff0c;以自动化Excel任务。 2、宏的优点 我们可以利用宏来…

绿光一字线激光模组:工业制造与科技创新的得力助手

在现代工业制造和科技创新领域&#xff0c;绿光一字线激光模组以其独特的性能和广泛的应用前景&#xff0c;成为了不可或缺的关键设备。这种激光模组能够发射出一条明亮且精确的绿色激光线&#xff0c;具有高精度、高稳定性和长寿命的特点&#xff0c;为各种精密加工和测量需求…

Python Turtle绘图:重现汤姆劈树的经典瞬间

Python Turtle绘图&#xff1a;重现汤姆劈树的经典瞬间 &#x1f980; 前言 &#x1f980;&#x1f41e;往期绘画&#x1f41e;&#x1f40b; 效果图 &#x1f40b;&#x1f409; 代码 &#x1f409; &#x1f980; 前言 &#x1f980; 《汤姆与杰瑞》&#xff08;Tom and Jerr…

Oracle - 多区间按权重取值逻辑 ,分时区-多层级-取配置方案(二)

Oracle - 多区间按权重取值逻辑 &#xff0c;分时区-多层级-取配置方案https://blog.csdn.net/shijianduan1/article/details/133386281 某业务配置表&#xff0c;按配置的时间区间及组织层级取方案&#xff0c;形成报表展示出所有部门方案的取值&#xff1b; 例如&#xff0…

DataGear 5.2.0 发布,数据可视化分析平台

DataGear 企业版 1.3.0 已发布&#xff0c;欢迎体验&#xff01; http://datagear.tech/pro/ DataGear 5.2.0 发布&#xff0c;图表插件支持定义依赖库、严重 BUG 修复、功能改进、安全增强&#xff0c;具体更新内容如下&#xff1a; 重构&#xff1a;各模块管理功能访问路径…

详解八大排序(一)------(插入排序,选择排序,冒泡排序,希尔排序)

文章目录 前言1.插入排序&#xff08;InsertSort&#xff09;1.1 核心思路1.2 实现代码 2.选择排序&#xff08;SelectSort&#xff09;2.1 核心思路2.2 实现代码 3.冒泡排序&#xff08;BubbleSort&#xff09;3.1 核心思路3.2 实现代码 4.希尔排序&#xff08;ShellSort&…

02 —— Webpack 修改入口和出口

概念 | webpack 中文文档 | webpack中文文档 | webpack中文网 修改入口 webpack.config.js &#xff08;放在项目根目录下&#xff09; module.exports {//entry设置入口起点的文件路径entry: ./path/to/my/entry/file.js, }; 修改出口 webpack.config.js const path r…