中央仓库上传规则调整
2024 年6月11起,sonatype 账户体系迁移,不再支持用户名密码模式,之前所有上传jar包到maven中央仓库教程都因此失效,需要替换为 accessToken 方式上传。
受影响用户:所有的需要在 maven
中央仓库发布jar包的 Java
开发者。
报错现象
6月11 日起, Shoulder 一直稳定运行的自动构建发布jar包能力失效,新版本发布失败401。
预期 提交代码后将自动通过 CICD
拉取代码,构建 jar 包并发布到 maven 仓库。
实际 401 发布失败。
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]
原因分析
401 代表 sonatype 在校验 jar
包签名、上传者身份时与预留信息不匹配,此时需要检查以下部分。
-
检查
pom.xml
settings.xml
是否配置成功 (已检查提交记录,无变更) -
gpg --list-key
检查服务器公钥是否过期 (已检查,key永不过期,无问题) -
sonatype 账户体系迁移导致。【本文描述问题】
解决方案(三步完成):
2. 生成 token
-
点击右上方用户名,点击 profile 打开个人信息
-
在下拉框,切换到 User Token,点击 Access User Token 并输入用户名、密码
-
复制你的 User Token:这两个个文本框分别为最新toekn形式的 "userName", "password" ,你可以直接复制下方的xml配置
<server>
<id>${server}</id>
<username>leftShortToken</username>
<password>Here is your right long token</password>
</server>
扩展阅读
扩展:Sonatype 最新账号创建方式
Sonatype 本次改动不仅影响老用户的使用,还影响第一次学习发布 jar 包到 maven 中央仓库的新用户(创建账号方式也发生变化),现有的博客或指南将失效。
建议直接参考官方最新一手信息:sonatype 2024.6最新账号创建方式(面向sonatype新用户)
扩展:上传 jar 包流程
-
开发者上传 jar 包至 Sonatype
-
Sonatype 将 jar 包同步至 Maven中央仓库
-
Maven镜像仓库 从 Maven中央仓库 拉取jar包
-
使用者从各类 maven 仓库获取 jar包
我们常说的如何发布jar包,一般指的是第一个流程。
扩展:自动发布jar包到中央仓库
Shoulder
开源项目:是 Spring Boot
的一套插件库,目标成为 Spring Boot
最好的伙伴。
自动发布jar包原理
Shoulder 使用了 Drone
作为 CICD 的服务器,整个流程是:
-
git push 提交代码
-
代码仓库收到提交调用
Drone
WebHook -
Drone 根据
.drone.yml
自动执行命令,自动构建 jar包,自动发布到远程仓库
Shoulder
和 Spring Boot
关系
-
如
Mybatis-plus
和Mybatis
-
如
redisson
和redis
-
如
Slf4j
和Log
更多: Shoulder 官方文档
扩展:Sonatype、中央仓库关系
Sonatype
身份:Sonatype是一个提供软件生命周期管理解决方案的公司,它提供了一个名为 Nexus Repository Manager
的仓库管理器,用于存储和管理软件构件(jar 包)。
关系:Sonatype运营着Maven中央仓库,并提供对其进行管理和维护的服务。
发布jar包必须注册 Sonatype 账号并在 Sonatype 发布 jar,然后 Sonatype 帮你发布到 maven 中央仓库。 |