Ubuntu下通过需认证代理使用Bazel构建Gerrit失败求助
解决Bazel构建Gerrit时的代理认证407错误
我之前在公司带认证的代理环境里也碰到过一模一样的问题——Bazel完全不理会系统设置的http_proxy/https_proxy,直接抛出407代理认证失败的报错。这是因为Bazel的网络请求逻辑和wget、Maven这类工具不一样,尤其是你用的0.13.0rc2和0.20这些旧版本,对代理的支持更“挑剔”。下面给你几个靠谱的解决办法:
方法一:临时命令行配置(单次生效)
如果只是临时测试,可以在运行Bazel时直接带上代理参数,把下面的占位符换成你公司的实际代理信息:
bazel build gerrit \ --host_jvm_args="-Dhttp.proxyHost=你的代理地址" \ --host_jvm_args="-Dhttp.proxyPort=代理端口" \ --host_jvm_args="-Dhttp.proxyUser=你的认证用户名" \ --host_jvm_args="-Dhttp.proxyPassword=你的认证密码" \ --host_jvm_args="-Dhttps.proxyHost=你的代理地址" \ --host_jvm_args="-Dhttps.proxyPort=代理端口" \ --host_jvm_args="-Dhttps.proxyUser=你的认证用户名" \ --host_jvm_args="-Dhttps.proxyPassword=你的认证密码"
如果有内部域名不需要走代理,再加两行免代理配置:
--host_jvm_args="-Dhttp.nonProxyHosts=localhost|127.0.0.1|你的内部域名" \ --host_jvm_args="-Dhttps.nonProxyHosts=localhost|127.0.0.1|你的内部域名"
方法二:全局配置文件(永久生效)
每次敲长命令太麻烦,推荐在你的用户主目录下创建/编辑.bazelrc文件,把代理配置写进去,以后所有Bazel命令都会自动加载这些设置:
# HTTP代理配置 build --host_jvm_args="-Dhttp.proxyHost=你的代理地址" build --host_jvm_args="-Dhttp.proxyPort=代理端口" build --host_jvm_args="-Dhttp.proxyUser=你的认证用户名" build --host_jvm_args="-Dhttp.proxyPassword=你的认证密码" # HTTPS代理配置 build --host_jvm_args="-Dhttps.proxyHost=你的代理地址" build --host_jvm_args="-Dhttps.proxyPort=代理端口" build --host_jvm_args="-Dhttps.proxyUser=你的认证用户名" build --host_jvm_args="-Dhttps.proxyPassword=你的认证密码" # 免代理地址(按需添加) build --host_jvm_args="-Dhttp.nonProxyHosts=localhost|127.0.0.1|你的内部域名" build --host_jvm_args="-Dhttps.nonProxyHosts=localhost|127.0.0.1|你的内部域名"
方法三:针对旧版本Bazel的额外配置
你用的0.13.0rc2是比较老的版本,除了JVM参数,还需要设置大写的环境变量——旧版Bazel对代理变量的大小写敏感,小写的http_proxy会被直接忽略。可以在终端里临时导出:
export HTTP_PROXY=http://用户名:密码@代理地址:端口 export HTTPS_PROXY=https://用户名:密码@代理地址:端口 export NO_PROXY=localhost,127.0.0.1,你的内部域名
要是想永久生效,把这几行加到~/.bashrc或者~/.zshrc里,重启终端就会自动加载。
最后验证
配置完之后,先清理Bazel的缓存避免旧的错误状态影响:
bazel clean --expunge
然后再运行构建命令:
bazel build gerrit
应该就能正常拉取依赖,不会再报407错误了。
内容的提问来源于stack exchange,提问作者Sonic78




