Nexus部署Maven项目返回401未授权错误求助
我之前在配置Nexus Maven部署的时候也踩过这个401的坑,结合你的描述,给你几个具体的排查和解决方向:
确认生效的settings.xml文件
Maven会读取两个位置的settings配置:Maven安装目录/conf/settings.xml和用户目录/.m2/settings.xml,很多时候我们修改了其中一个,但实际生效的是另一个。你可以执行命令:mvn help:effective-settings在输出结果里搜索
<server>节点,确认id="nexus"的凭证是否正确加载,避免修改错了文件。检查Nexus仓库的权限配置
即使凭证正确,Nexus也可能没给你的用户分配部署权限:- 登录Nexus控制台(
http://localhost:8018); - 进入Security → Roles,找到对应仓库的部署角色(比如
nx-repository-view-maven2-maven-releases-deploy和nx-repository-view-maven2-maven-snapshots-deploy); - 进入Security → Users,编辑
admin用户,确保已经添加了上述部署角色。
- 登录Nexus控制台(
直接在命令行传递凭证测试
为了排除settings.xml的问题,你可以尝试直接在deploy命令里指定凭证:mvn clean deploy -Dusername=admin -Dpassword=admin如果这样能成功,说明你的settings.xml配置可能有问题(比如位置不对、格式错误);如果还是401,那大概率是Nexus的权限或者仓库地址的问题。
核对仓库ID的一致性
确保pom.xml里<distributionManagement>下的<repository>和<snapshotRepository>的id,与settings.xml里<server>的id完全一致(包括大小写、无空格),这是Maven匹配凭证的关键,哪怕差一个字符都会导致认证失败。验证Nexus仓库地址的正确性
直接在浏览器访问你配置的仓库URL:http://localhost:8018/repository/maven-releases和http://localhost:8018/repository/maven-snapshots,确认能正常打开仓库页面,避免端口、协议(http/https)写错。排查镜像配置的干扰
如果你的settings.xml里配置了<mirrors>节点,可能会把部署请求转发到其他仓库,导致认证失败。检查mirror的mirrorOf属性,如果设置为*,会覆盖所有仓库请求,包括deploy。可以调整为:<mirror> <id>mirror-id</id> <mirrorOf>central</mirrorOf> <!-- 只镜像central仓库,不影响deploy到Nexus --> <url>...</url> </mirror>
按照上面的步骤逐一排查,应该能找到问题所在。
内容的提问来源于stack exchange,提问作者ssk

