前几天向maven中央仓库发布版本,执行上传命令mvn release:perform
时报错了:
[ERROR] Failed to execute goal org.sonatype.plugins:nexus-staging-maven-plugin:1.6.13:deploy (injected-nexus-deploy) on project xxxxx: Failed to deploy artifacts: Could not transfer artifact xxxxx:pom:6.0.7-20240619.183701-1 from/to ossrh (https://oss.sonatype.org/content/repositories/snapshots): authentication failed for https://oss.sonatype.org/content/repositories/snapshots/xxxxxx.pom, status: 401 Content access is protected by token -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
我的maven中央仓库的账号注册了好多年了,一直正常使用,没有出现过问题。
最终找到mave官方说明:《401 Unauthorized error》知道了原因:
此错误消息表示您可能通过提供
用户名
和密码
明文验证执行到OSSRH的发布。然而这是以前允许的与OSSRH交互的方式,现在OSSRH发布的身份验证过程的更改了,要求使用用户令牌
机制。我们的有关于《设置用户令牌》的文档会对您有所帮助。
如果你是maven中央仓库的老用户,而不是新注册用户,而且忽略了最近Sonatype启用了新的基于令牌的身份验证机制,则可能遇到与我同样的情况。
以前我们在$HOME/.m2/settings.xml
如下以明文形式保存maven中央仓库的验证信息
<server>
<id>sonatype-nexus-snapshots</id>
<username>${username}</username>
<password>${password}</password>
</server>
<server>
<id>sonatype-nexus-staging</id>
<username>${username}</username>
<password>${password}</password>
</server>
新的基于令牌的身份验证机制要求将<username>
和<password>
字段以加密令牌形式保存。
需要参照《Generate a Token on NXRM servers》登录Nexus Repository Manager后台,在Profile/User Token/Access User Token
界面如下 获取你的令牌
将得到的令牌数据如下更新$HOME/.m2/settings.xml
中的 <username>
和<password>
字段就解决问题了。
参考资料
《401 Unauthorized error》
《Generate a Token on NXRM servers》
《Sonatype – 401 Content access is protected by token》