在构建定义还没做任何有用的事之前,sbt 就可能需要网络。它的启动器必须获取组件,而构建稍后还可能通过额外库访问仓库。藏在任务里的代理设置,对首次下载来说可能来得太晚。

从真正运行 sbt 的那个 JVM 入手。对于读取项目 .jvmopts 的启动器,基本的端点属性可以是:

-Dhttp.proxyHost=proxy.example.net
-Dhttp.proxyPort=8080
-Dhttps.proxyHost=proxy.example.net
-Dhttps.proxyPort=8080

这些值分别指定主机名和端口,并不是完整的代理 URL。对于获准的公共仓库下载,HTTP 代理列表可以为这些字段提供候选值。HTTPS 仓库仍然可以通过 HTTP 代理使用 CONNECT 访问。

留意是哪一步下载失败

启动器引导、构建工具组件、插件和依赖并不一定使用同一配置层。在修改仓库声明之前,先确定失败的 URL 和所处阶段。

仓库选择回答的是工件从哪里获取。代理配置回答的是网络客户端如何到达那个端点。用内部镜像替换仓库可以是另一种受支持的选项,但它不会为其他所有目的地配置网络代理。

代理认证是另一项检查。不要假设每个 Java 下载器都会把任意的 proxyUser 属性当作受支持的登录机制。请使用已安装启动器和相关解析器文档中给出的认证安排。

最后,检查实际生效的启动器环境,而不是照搬为其他 runner 写的指南里的变量。DNS 失败、仓库不可用和代理登录被拒都可能在依赖解析期间出现,但所需的修复方式差别很大。

相关文章