解决Maven依赖问题:无需认证的代理却提示认证失败
这种情况我之前踩过坑,明明代理说不需要认证,却一直弹TMG的授权错误,大概率是配置冲突或者系统/工具的隐藏逻辑在搞鬼,试试下面这些排查步骤:
先排查系统级代理的干扰
很多时候IntelliJ会自动继承系统代理设置,哪怕你手动配了IDE和Maven的代理。比如Windows的「Internet选项」里,检查代理服务器有没有勾上多余的「自动配置脚本」,或者有没有残留过时的认证信息;Mac的话去「系统设置-网络-代理」里确认,确保代理配置是纯无认证的地址+端口。修正Maven settings.xml的代理配置(重点)
很多人只配了HTTP代理,忽略了HTTPS仓库的代理配置,这会导致访问Maven中央仓库(HTTPS)时出错,报错信息却误导成认证问题。把代理配置改成这样:<proxies> <!-- HTTP代理 --> <proxy> <id>company-http-proxy</id> <active>true</active> <protocol>http</protocol> <host>myproxy.com</host> <port>3128</port> <nonProxyHosts>localhost|127.0.0.1|*.yourcompany.com</nonProxyHosts> </proxy> <!-- HTTPS代理,和HTTP用同一个地址端口 --> <proxy> <id>company-https-proxy</id> <active>true</active> <protocol>https</protocol> <host>myproxy.com</host> <port>3128</port> <nonProxyHosts>localhost|127.0.0.1|*.yourcompany.com</nonProxyHosts> </proxy> </proxies>另外要确认这个settings.xml是IntelliJ正在使用的:打开IntelliJ的「Settings → Build, Execution, Deployment → Build Tools → Maven」,检查「User settings file」的路径是否指向你修改的文件。
清除Maven本地仓库的缓存
缓存里的失败请求记录会导致重复报错。找到你的Maven本地仓库(默认是~/.m2/repository),删除org/apache/maven/plugins/maven-clean-plugin整个文件夹,然后再执行mvn -U clean install强制更新依赖。检查IntelliJ的VM选项冲突
如果你之前手动加过命令行代理参数,可能和Maven的settings.xml配置冲突。打开IntelliJ的「Help → Edit Custom VM Options」,看看有没有多余的-DproxyHost、-DproxyPort参数,把这些删掉,让Maven完全使用settings.xml的配置。测试代理是否真的无需认证(用curl验证)
打开终端执行:curl -x http://myproxy.com:3128 https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.pom如果这个命令能正常返回pom文件内容,说明代理确实无需认证;如果curl也报TMG授权错误,那大概率是公司代理用了NTLM域认证(虽然你说无需认证,但Forefront TMG经常默认用域账号自动认证,Maven不会自动走这个流程),这时候需要在settings.xml里加上NTLM配置:
<proxy> <id>company-ntlm-proxy</id> <active>true</active> <protocol>http</protocol> <host>myproxy.com</host> <port>3128</port> <username>你的域账号</username> <password>你的域密码</password> <ntlmHost>你的机器名</ntlmHost> <ntlmDomain>公司域名</ntlmDomain> <nonProxyHosts>localhost|127.0.0.1|*.yourcompany.com</nonProxyHosts> </proxy>最后彻底重启
修改完所有配置后,重启IntelliJ甚至你的本地机器,很多时候缓存的配置需要彻底重启才能生效。
内容的提问来源于stack exchange,提问作者Mazin

