无法推送Maven构件至GitLab,遭遇401未授权错误
检查GitLab令牌权限
确认你用的Private-Token对应的GitLab账号,必须拥有目标项目的开发者及以上权限(至少要具备write_package_registry权限)。另外注意:Job-Token仅在GitLab CI/CD流水线内部有效,本地推送完全用不上,直接删掉Job-Token相关配置。校验settings.xml与pom.xml的ID匹配
两个配置文件里的仓库ID必须完全一致(大小写都不能错)。举个例子:
pom.xml里的分发仓库配置:<distributionManagement> <repository> <id>gitlab-maven-repo</id> <url>https://gitlab.example.com/api/v4/projects/123/packages/maven</url> </repository> </distributionManagement>对应的settings.xml中server配置必须是:
<server> <id>gitlab-maven-repo</id> <password>你的GitLab Private-Token</password> </server>本地推送只保留一种认证方式即可,删掉Job-Token和账号密码的冗余配置,避免冲突。
确认仓库URL正确性
仓库URL必须是项目的完整制品库地址,格式为https://gitlab.example.com/api/v4/projects/[项目ID]/packages/maven。项目ID可以在GitLab项目主页的「设置」→「通用」页面找到。不要用项目路径代替ID,比如/api/v4/projects/my-group%2Fmy-project/packages/maven这种URL需要正确编码特殊字符,直接用项目ID更稳妥。测试令牌有效性
用curl直接验证令牌是否能正常访问仓库:curl --header "Private-Token: 你的令牌内容" https://gitlab.example.com/api/v4/projects/123/packages/maven如果返回200状态码或仓库相关信息,说明令牌有效;如果返回401,那就是令牌本身有问题,去GitLab重新生成一个新的Private-Token。
升级Maven插件和版本
maven-deploy-plugin 2.8.2版本偏老,建议升级到3.1.0或更高版本,在pom.xml中配置:<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-deploy-plugin</artifactId> <version>3.1.0</version> </plugin> </plugins> </build>同时确保本地Maven版本在3.6.0以上,老版本可能对GitLab的认证逻辑支持不足。
清除Maven缓存重试
删除本地Maven仓库中对应构件的目录(比如~/.m2/repository/com/org/tech-root),然后执行mvn clean deploy -U重新推送。
内容的提问来源于stack exchange,提问作者user923499

