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

目录

背景:

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镜像仓库…

  • 27
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
idea是一种集成开发环境(IDE),能够帮助开发者更轻松地开发、调试和部署应用程序。Maven是一个项目管理工具,它提供了一种方便的方式来管理和构建Java项目,并且有一个中央仓库来存储各种依赖项。在使用idea上jarMaven仓库时,可以按照以下步骤进行操作: 1. 在Maven项目的pom.xml文件中添加jar的相关配置信息。例如,可以在<dependencies>标签中添加一个<dependency>标签,指定jar的坐标、版本号等信息。 2. 在项目根目录下执行Maven命令,将jar并上Maven仓库。可以使用Maven插件或命令行工具,在命令行中执行类似于"mvn clean install"的命令,将jar成标准的Maven构建产物,并将其上到本地Maven仓库或远程仓库。 3. 配置Maven仓库的地址和认证信息。如果使用的是远程仓库,需要在settings.xml文件中配置远程仓库的地址,并提供认证信息以获得上权限。 4. 使用idea的Maven插件进行构建和上。在idea的Maven面板中,可以找到相关的命令和配置选项,可以使用插件来构建项目并上jarMaven仓库。 以上是大致的步骤,具体操作可能会因开发环境和项目配置而有所不同。但总的来说,使用idea上jarMaven仓库是一个相对简单的过程,只需要在项目配置中添加必要的依赖信息,并使用Maven命令或插件进行打和上即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值