官方解决 maven 上传jar包到中央仓库401

目录

  • 目录
  • 背景:
  • 报错现象
  • 一句话解决
  • 一句话原因
  • 问题描述
  • 前车之鉴:尝试无果的记录
    • 尝试1:询问 GPT 未果
    • 尝试2:搜索引擎未果
  • 正确原因分析:
    • 佐证
  • 解决方案(三步完成):
    • 1. 打开 sonatype
    • 2. 生成 token
    • 3. 修正 settings.xml
    • 重试发布,成功!
  • 扩展阅读
    • 扩展:Sonatype 最新账号创建方式
    • 扩展:上传 jar 包流程
    • 扩展:自动发布jar包到中央仓库
      • 自动发布jar包原理
      • Shoulder 简介
    • 扩展:Sonatype、中央仓库关系
        • Sonatype
        • Maven中央仓库
        • Maven镜像仓库

背景:

2024 年6月11起sonatype 账户体系迁移,不再支持用户名密码模式,之前所有上传jar包到maven中央仓库教程都因此失效,咨询多个 GPT、搜索均无正确答案

受影响用户:所有的需要在 maven 中央仓库发布jar包的 Java 开发者。

本文记录问题时间线,解决方案,节省更多人时间。

报错现象

status code: 401, reason phrase: Content access is protected by token (401)

报错详情:

[ERROR] Failed to execute goal org.sonatype.plugins:nexus-staging-maven-plugin:1.6.13:deploy (injected-nexus-deploy) on project shoulder-archetype-simple: Remote staging failed: Failed to deploy artifacts: Could not transfer artifact cn.itlym:shoulder-starters:pom.asc:0.8.1 from/to oss (https://oss.sonatype.org:443/service/local/staging/deployByRepositoryId/cnitlym-1116): status code: 401, reason phrase: Content access is protected by token (401) -> [Help 1]

请添加图片描述

一句话解决

settings.xml userName、password 更换为 sonatype 生成的 token

一句话原因

sonatype 认证体系升级,官宣不再支持 userName、password 认证方式,导致按照老旧上传方式上传jar失败


问题描述

6月11 日起, Shoulder 一直稳定运行的自动构建发布jar包能力失效,新版本发布失败401。

预期 提交代码后将自动通过 CICD 拉取代码,构建 jar 包并发布到 maven 仓库。

实际 401 发布失败。

前车之鉴:尝试无果的记录

避免重复踩坑,可跳过阅读

尝试1:询问 GPT 未果

你是资深的java专家,精通Java、maven,有着多年发布 jar 包的经验,现在发布jar包(mvn deploy)阶段遇到了以下报错,你来分析下是什么原因
[报错信息…]

GPT 回复(无效回答):

这个报错是因为在发布jar包时,遇到了权限问题。具体来说,是在使用nexus-staging-maven-plugin插件进行远程部署时,没有提供正确的访问令牌(token),导致服务器返回了401错误。

要解决这个问题,你需要在Maven的settings.xml文件中配置正确的访问令牌。请按照以下步骤操作:

打开Maven的settings.xml文件,通常位于用户目录下的.m2文件夹中。

在标签内添加一个元素,配置如下:

<servers>
  <server>
    <id>oss.sonatype.org</id>
    <username>your_sonatype_username</username>
    <password>your_sonatype_password</password>
  </server>
</servers>

    
解释
将your_sonatype_username和your_sonatype_password替换为你的Sonatype账户的用户名和密码。

保存settings.xml文件并重新运行mvn deploy命令。

这样应该可以解决你遇到的问题。如果还有其他问题,请随时告诉我。

尝试2:搜索引擎未果

几乎都是指导如何上传jar包,401 的解决方案都是老旧问题,而该问题是 2024年6月官方升级引入,目前无正确解决方案


正确原因分析:

401 代表 sonatype 在校验 jar 包签名、上传者身份时与预留信息不匹配,此时需要检查以下部分。
sonatype-banner

  1. 检查pom.xml settings.xml 是否配置成功 (已检查提交记录,无变更)
  2. gpg --list-key 检查服务器公钥是否过期 (已检查,key永不过期,无问题)
  3. sonatype 账户体系迁移导致。【本文描述问题】

佐证

收到 Sonatype 官方团队邮件:sonatype 用户体系迁移公告
邮件截图

解决方案(三步完成):

Sonatype 官方提供的新认证方案链接

1. 打开 sonatype

https://oss.sonatype.org/#welcome ,在右上角 Log In登录你的账号。

2. 生成 token

  1. 点击右上方用户名,点击 profile 打开个人信息
  2. 在下拉框,切换到 User Token,点击 Access User Token 并输入用户名、密码
    sonatype-profile
  3. 复制 User Token:这两个文本框分别为最新toekn形式的 “userName”, “password” ,这里你可以直接复制下方的xml配置
<server>
  <id>${server}</id>
  <username>leftShortToken</username>
  <password>Here is your right long token</password>
</server>

3. 修正 settings.xml

  1. 打开你的 settings.xml (一般在 C:\Users\Admin\.m2\settings.xml 或者 /home/UserName/.m2/settings.xml
  2. 修改 <servers> 内容:将刚刚复制的最新的 server 替换原来的配置(仅是 userName、passWord 变化,其余字段保持原有值)
  3. 保存退出

重试发布,成功!


扩展阅读

扩展:Sonatype 最新账号创建方式

Sonatype 本次改动不仅影响老用户的使用,还影响第一次学习发布 jar 包到 maven 中央仓库的新用户(创建账号方式也发生变化),现有的博客或指南将失效。

建议直接参考官方最新一手信息:sonatype 2024.6最新账号创建方式(面向sonatype新用户)

扩展:上传 jar 包流程

请添加图片描述

  1. 开发者上传 jar 包至 Sonatype
  2. Sonatype 将 jar 包同步至 Maven中央仓库
  3. Maven镜像仓库 从 Maven中央仓库 拉取jar包
  4. 使用者从各类 maven 仓库获取 jar包

我们常说的如何发布jar包,一般指的是第一个流程。

扩展:自动发布jar包到中央仓库

Shoulder 开源项目:是 Spring Boot 的一套插件库,目标是成为 Spring Boot 最好的伙伴。

自动发布jar包原理

Shoulder 使用了 Drone 作为 CICD 的服务器,整个流程是:

  1. git push 提交代码
  2. 代码仓库收到提交调用 Drone WebHook
  3. Drone 根据 .drone.yml 自动执行命令,自动构建 jar包,自动发布到远程仓库

最新 .drone.yml 脚本内容见 GiteeGithub

Shoulder 简介

ShoulderSpring Boot 关系

  • Mybatis-plusMybatis
  • redissonredis
  • Slf4jLog

更多: Shoulder-官方文档

扩展:Sonatype、中央仓库关系

Sonatype

身份:Sonatype是一个提供软件生命周期管理解决方案的公司,它提供了一个名为Nexus Repository Manager的仓库管理器,用于存储和管理软件构件(jar 包)。

关系:Sonatype运营着Maven中央仓库,并提供对其进行管理和维护的服务。

所以发布jar包必须注册 Sonatype 账号并在 Sonatype 发布 jar,然后 Sonatype 帮你发布到 maven 中央仓库。

Maven中央仓库

身份:Maven中央仓库是Java世界中最大的开源软件仓库,存放着大量的Java库和框架的jar包。

关系:Maven中央仓库由Sonatype维护,开发者可以通过Maven工具访问该仓库,下载或上传构件。

几乎所有公开的 jar 包都在此托管

Maven镜像仓库

身份:Maven镜像仓库是Maven中央仓库的镜像,它们复制了中央仓库的内容,以提供更快的访问速度和降低原始仓库的负载。
关系:Maven镜像仓库与Maven中央仓库保持同步,它们通常由第三方机构或公司运营,如阿里云、华为云等提供的镜像服务。

举例:阿里云mvaen镜像仓库、腾讯云mvaen镜像仓库、华为云mvaen镜像仓库、清华大学mvaen镜像仓库…

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MacOS设备远程登录配置结合内网穿透实现异地ssh远程连接

文章目录 前言1. MacOS打开远程登录2. 局域网内测试ssh远程3. 公网ssh远程连接MacOS3.1 MacOS安装配置cpolar3.2 获取ssh隧道公网地址3.3 测试公网ssh远程连接MacOS 4. 配置公网固定TCP地址4.1 保留一个固定TCP端口地址4.2 配置固定TCP端口地址 5. 使用固定TCP端口地址ssh远程 …

【C++】类和对象(四)拷贝构造、赋值运算符重载

文章目录 四、拷贝构造函数干嘛的&#xff1f;写拷贝构造函数的注意事项正确写法 不显示定义拷贝构造函数的情况浅拷贝:one:示例&#xff1a;内置类型:two:示例&#xff1a;自定义类型一个提问 深拷贝 五、赋值运算符重载运算符重载函数原型注意调用时的两种书写方式完整实现代…

Ant design Vue 表格中显示不同的状态(多条件显示)

比如&#xff1a;后端一个字段有多种状态&#xff1a; 那么后端接口会返回&#xff1a;0 或者 1 或者 2 其中一个&#xff0c;前端需要展示的是对应的文字&#xff0c;像简单的只有两个状态的可以直接在列里面操作&#xff1a; {title: 状态,dataIndex: usable,customRender: …

国产测温速度快且功耗低的温度传感芯片MY18E20可Pin-Pin替换DS18B20

MY18E20是一款国产高精度可编程的数字模拟混合信号温度传感芯片&#xff1b;感温原理基于CMOS半导体PN节温度与带隙电压的特性关系&#xff0c;经过小信号放大、模数转换、数字校准补偿后&#xff0c;数字总线输出&#xff0c;具有精度高、一致性好、测温快、功耗低、可编程配置…

剖析影响大米码垛机性能的关键因素

在现代化粮食加工产业链中&#xff0c;大米码垛机以其高效、精准的自动化操作&#xff0c;成为提升生产效率、降低劳动强度的得力助手。然而&#xff0c;要想充分发挥大米码垛机的性能优势&#xff0c;我们必须深入了解影响其性能的关键因素。星派将深入剖析这些关键因素&#…

1.XSS-反射型(get)

反射型XSS或不持久型XSS 含义&#xff1a;交互的数据一般不会被存在在数据库里面,只是简单的把用户输入的数据反射给浏览器&#xff0c;一次性&#xff0c;所见即所得。 进行测试一下页面是否存在xss漏洞&#xff0c;进行测试一下 "<>6666输入一些字符或者符号&am…

YOLOv10改进 | Neck | 添加双向特征金字塔BiFPN【含二次独家创新】

&#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录&#xff1a;《YOLOv8改进有效涨点》专栏介绍 & 专栏目录 | 目前已有40篇内容&#xff0c;内含各种Head检测头、损失函数Loss、B…

【面试干货】Java的基础类型和字节大小

【面试干货】Java的基础类型和字节大小 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在Java编程语言中&#xff0c;有八种基本数据类型&#xff0c;它们分别是&#xff1a;布尔型&#xff08;boolean&#xff09;、字节型&#xff08;byt…

前端架构(含演进历程、设计内容、AI辅助设计、架构演进历程)

前端架构的演进历程 前端架构的设计内容 技术选型(库、工具、标准规范、性能、安全、扩展性 )设计模式及代码组织(模块化、分层架构、数据结构)构建与部署(性能优化、自动化、集成、测试) 项目体量 小型项目&#xff1a;对于小型项目&#xff0c;前端架构需要关注模块化、组件…

可视化大屏开发涉及到的8大技术栈,收藏起来不迷路。

可视化大屏开发设计涉及到的技术栈包括&#xff1a; 前端开发技术&#xff1a; HTML、CSS、JavaScript、TypeScript等&#xff0c;用于构建用户界面和实现交互效果。 数据可视化库&#xff1a; 如D3.js、ECharts、Highcharts等&#xff0c;用于将数据以图表、地图、仪表盘等…

Hibernate 框架进行对象关系映射(ORM)

Hibernate是一个广泛使用的Java对象关系映射&#xff08;ORM&#xff09;框架&#xff0c;它通过将Java类与数据库表关联起来&#xff0c;使得开发人员可以使用面向对象的编程方式进行数据库操作。Hibernate的主要目标是消除冗长的JDBC代码和手动处理SQL的需求&#xff0c;从而…

在C#中对 JSON进行序列化和反序列化处理

概述&#xff1a;在现代软件开发领域&#xff0c;不同系统和平台之间的数据交换是不可或缺的方面。JSON&#xff08;JavaScript 对象表示法&#xff09;因其轻量级、人类可读和易于解析的特性而成为一种无处不在的数据格式。使用 C# &#x1f680;编程的 JSON 序列化和反序列化…

C# 语言在AGI 赛道上能做什么

自从2022年11月OpenAI正式对外发布ChatGPT依赖&#xff0c;AGI 这条赛道上就挤满了重量级的选手&#xff0c;各大头部公司纷纷下场布局。原本就在机器学习、深度学习领域占据No.1的Python语言更是继续稳固了自己AI一哥的位置。凭借着Microsoft 和 OpenAI 长期以来一直是紧密相连…

团队管理五个基本法则,帮你打造高效团队

团队管理是一项至关重要的工作&#xff0c;作为一名管理者&#xff0c;应该如何在团队管理中发挥作用呢&#xff1f;以下是团队管理的五个基本原则&#xff0c;它们能够帮助你打造出一个高效协作的团队。 一、以身作则 团队要保持超强的执行力&#xff0c;管理者必须以身作则…

【分类讨论】899. 有序队列

本文涉及知识点 分类讨论 LeetCode899. 有序队列 给定一个字符串 s 和一个整数 k 。你可以从 s 的前 k 个字母中选择一个&#xff0c;并把它加到字符串的末尾。 返回 在应用上述步骤的任意数量的移动后&#xff0c;字典序最小的字符串 。 示例 1&#xff1a; 输入&#xff1…

工业智能网关如何与设备连接?天拓四方

随着工业4.0时代的来临&#xff0c;智能化、自动化已成为工业生产的标配。在这样的背景下&#xff0c;工业智能网关应运而生&#xff0c;成为连接工业设备、实现数据交互与管理的关键节点。本文将阐述工业智能网关如何与设备连接&#xff0c;旨在为读者提供一套清晰、实用的解决…

【node】启动本地打包文件的方式

前言 … 目标 1 初始化node文件 2 将打包文件通过node发布到本地 3 系列文件 【node】创建本地接口 一 node方式 1 在新建一个空的文件夹node 进入空文件夹在,文件夹的地址栏输入cmd回车,会自动跳转到命令行工具里 2 配置初始化文件 在命令行输入命令npm init,生成pac…

CSDN自定义模块全攻略,DIY系统原有样式打造专属个性化主页!

个人主页&#xff1a;学习前端的小z 个人专栏&#xff1a;HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结&#xff0c;欢迎大家在评论区交流讨论&#xff01; 文章目录 &#x1f4af;如何通过HTMLCSS自定义模板diy出自己的个性化csdn主页&#x…

# 消息中间件 RocketMQ 高级功能和源码分析(八)

消息中间件 RocketMQ 高级功能和源码分析&#xff08;八&#xff09; 一、消息中间件 RocketMQ 源码分析&#xff1a;实时更新消息消费队列与索引文件流程说明 1、实时更新消息消费队列与索引文件 消息消费队文件、消息属性索引文件都是基于 CommitLog 文件构建的&#xff0…

mock-前端数据模拟

简介 数据模拟不是开发流程中的必要一环 Json-server 简介&#xff1a; json-server 是一个简单的 Node.js 服务端应用程序&#xff0c;这个工具的主要作用是提供一个模拟的后端服务&#xff0c;可以在前端开发过程中独立于后端进行简单工作。 使用&#xff1a; 1、 安装…