Maven 3.8.4访问Apache Archiva私有仓库提示403 Forbidden如何解决
第一步:验证配置ID一致性
Maven中
settings.xml里server节点的id属性必须和对应私有仓库的repository/mirror节点的id完全一致,大小写敏感,如果id不匹配,配置的用户名密码不会生效。
你可以对比mvn help:effective-settings -DshowPasswords=true输出里的server id和仓库配置的id是否完全相同。
第二步:检查是否存在全局配置覆盖
Homebrew在M1芯片Mac上安装的Maven默认全局配置路径为/opt/homebrew/Cellar/maven/3.8.4/libexec/conf/settings.xml,如果全局配置中存在同id的server配置,会覆盖用户目录下的~/.m2/settings.xml配置。
可以执行以下命令查看当前生效的所有配置文件路径:mvn help:effective-settings -X | grep "settings"
第三步:清理本地仓库损坏标记文件
本地仓库中对应构件目录下的.lastUpdated后缀标记文件会阻止Maven重新发起请求拉取构件,执行以下命令删除所有损坏标记:find ~/.m2/repository -name "*.lastUpdated" -delete
第四步:开启预认证适配私有仓库
Apache Archiva部分版本需要客户端主动发送认证头,而非等待服务端返回401后再提交认证,你可以在settings.xml对应server节点下添加预认证配置:
<server> <id>company</id> <username>你的用户名</username> <password>你的密码</password> <configuration> <httpConfiguration> <all> <usePreemptive>true</usePreemptive> </all> </httpConfiguration> </configuration> </server>
第五步:排查特殊字符转义问题
如果你的密码包含&、<、>、'、"这类XML特殊字符,需要在配置中做转义处理,对应转义规则为:
&转义为&<转义为<>转义为>'转义为'"转义为"
第六步:开启debug日志定位根因
如果上述步骤都无法解决,执行以下命令开启详细日志,查看请求私有仓库时是否正确携带了认证头:mvn clean package -X -Dmaven.wagon.http.debug=true
在输出日志中查找对应仓库的请求头,检查Authorization字段是否存在,将字段值(Basic 后面的字符串)做Base64解码,确认是否和你配置的用户名密码一致。
内容的提问来源于stack exchange,提问作者A. Yasar G.

