为什么 sbt 尝试 resolve/download 我已经在本地拥有的工件?

Why does sbt try to resolve/download artifacts I already have locally?

我住在公司代理后面,但我可以 "come up for air" 并在需要一段时间时连接到非代理互联网。

我在我的项目(在 public 网络上)的 sbt 中 运行 update/compile 循环,并且已经毫无问题地将其所有依赖项下载到我的本地 .ivy2 目录中。

然而,当我 运行 sbt 编译时,它有时仍会尝试重新解决我已经在本地 "own" 的问题——如果我尝试在代理后面执行此操作,它将挂起。为什么 sbt 这样做?

在确定我已经捕获了所有需要的工件之后,我希望能够在我的公司网络上工作。不确定 ivy 与 maven 工件的行为是否不同。碰巧注意到 ivy 工件上的行为,但它也可能影响 maven 拉取?

发生这种情况的原因有两个:

  1. 您所依赖的版本以 -SNAPSHOT 结尾。 sbt 将始终通过设计重新解决此问题。
  2. 您 运行 遇到了这方面的 sbt 错误。

sbt 在这里有很多问题。旧版本的 sbt 用于重新解析所有具有依赖性覆盖并且使用 %% 运算符指定的工件; sbt 似乎也重新解决了在依赖冲突解决期间被逐出的任何东西。

如果您在编译时看到逐出警告,请尝试为这些库版本添加依赖项覆盖,看看您的问题是否仍然存在。