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

embedded/2024/11/24 21:17:18/

介绍:【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-配置">四、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项目">五、尝试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.ppmy.cn/embedded/139327.html

相关文章

持续集成与持续部署:CI/CD实现教程

以下是一个基于常见工具实现 CI/CD 的基本教程示例&#xff0c;这里以 Git、Jenkins、Maven&#xff08;用于 Java 项目构建和管理依赖&#xff0c;其他语言项目可替换为对应构建工具&#xff09;以及 Docker&#xff08;用于容器化部署&#xff0c;非必需但很常用&#xff09;…

Apache Paimon】-- 6 -- 清理过期数据

目录 1、简要介绍 2、操作方式和步骤 2.1、调整快照文件过期时间 2.2、设置分区过期时间 2.2.1、举例1 2.2.2、举例2 2.3、清理废弃文件 3、参考 1、简要介绍 清理 paimon &#xff08;表&#xff09;过期数据可以释放存储空间&#xff0c;优化资源利用并提升系统运行效…

八、无刷电机电压电流温度采集

1、三相电流采样 上图为 U 相电流采集电路&#xff08;U、V、W 三相同理&#xff0c;这里只以 U 相为例&#xff09;&#xff0c;其中R17 为采样电阻&#xff08;20mR&#xff09;&#xff0c;当有电流 I 流过采样电阻时&#xff0c;采样电阻上就会产生一个电压&#xff0c;电压…

人工智能与SEO优化中的关键词策略解析

内容概要 在当今数字化快速发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;与搜索引擎优化&#xff08;SEO&#xff09;的结合正变得愈发重要。关键词策略是SEO优化的一项基础工作&#xff0c;它直接影响到网站的可见性和流量。通过运用智能算法&#xff0c;企业能…

关联度分析、灰色预测GM(1,1)、GM(1,1)残差模型——基于Python实现

关联度分析 import numpy as np import pandas as pd #关联度分析 #参考序列 Y_0[170,174,197,216.4,235.8] #被比较序列 Y_1[195.4,189.9,187.2,205,222.7] Y_2[308,310,295,346,367]#初始化序列 X_0np.array(Y_0)/Y_0[0] X_1np.array(Y_1)/Y_1[0] X_2np.array(Y_2)/Y_2[0]#计…

基于Java Springboot旅游民宿信息管理系统

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 数据…

掌握Git分布式版本控制工具:从基础到实践

一、引言 在软件开发过程中&#xff0c;版本控制是不可或缺的一环。Git作为一种分布式版本控制工具&#xff0c;以其高效、灵活的特点&#xff0c;受到了广大开发者的青睐。本文将详细介绍Git的基本概念、工作流程、常用命令&#xff0c;以及在IntelliJ IDEA中的操作方法。 二、…

Redis基本的全局命令

在学习redis基本的全局命令之前呢&#xff0c;我们必须先进入redis-cli客户端才行。 如图&#xff1a; get和set get和set是redis两个最核心的命令。 get&#xff1a;根据key来获取value。 set&#xff1a;把key和value存储进去。 如set命令如图&#xff1a; 对于上述图中&…