【问题标题】:Why does sbt keep downloading my snapshot dependencies?为什么 sbt 不断下载我的快照依赖项?
【发布时间】:2017-01-23 17:30:27
【问题描述】:

我有一个依赖于两个快照依赖项的 SBT 项目。每次我构建它时,它都会转到远程存储库以获取依赖项。即使我设置了offline := true,也是如此。

当我查看它如何尝试解决本地依赖项时,构建表示它正在“本地”中查找,即~/.ivy2/local/...——这是一个不存在的目录。

jar 位于~/.ivy2/cache/... 中,这是 SBT 从远程服务器提取依赖项时下载它们的位置。

我已经搜索了我的 .sbt 和 .scala 构建文件,并且字符串“local”没有出现在与存储库或缓存相关的这些文件中。

SBT 是针对 scala 2.11.8 构建的 0.13.11 版本。

为什么 SBT 会这样做,我怎样才能让它看到缓存的 jar?

【问题讨论】:

标签: scala sbt dependency-management ivy


【解决方案1】:

如果您想阻止 SBT 尝试从官方存储库下载,您可以简单地创建一个文件 project/offline-repositories:

[repositories]
  mirror-central: file:////nexus/central
  mirror-maven-central-org: file:////nexus/maven-central-org
  ...

(/nexus/central 和 /nexus/maven-central-org 应该包含您离线所需的(部分)镜像)

然后调用 sbt 并配置 sbt.repository.config 属性:

-Dsbt.override.build.repos=true \
-Dsbt.repository.config=./project/offline-repositories

供参考:

编辑

如果你想使用你的~/.m2 缓存:

[repositories]
  mirror-central: file:////home/XXXXX/.m2/repository
  mirror-maven-central-org: file:////home/XXXXX/.m2/repository
  ...

【讨论】:

  • 问题是当文件在缓存中时它没有使用本地常春藤缓存。您的建议是一种解决方法,但并不能真正解决我提出的问题。
  • 没错,这是一种解决方法,因为我认为这是不可能的。让我们等待更多答案,如果我错了,我会删除此回复。
【解决方案2】:

这显然是因为在我的 Ivy 缓存中,我有一个名为 ~/.ivy2/cache/com.xxx/xxx-utils/ivy-2.3.2-SNAPSHOT.xml.original 的文件,构建正在尝试并失败解析。我不确定这个文件来自哪里;可以想象它是很久以前手动放在那里的。

【讨论】:

  • 我好像搞错了。我创建了一个本地 Ivy 存储库,并且构建通过了。然后我尝试删除 ~/.ivy2/local 下的本地 Ivy 存储库并且我的构建工作 - 但后来我尝试使用相同的快照 jar 构建不同的项目并且构建失败。当我将本地 Ivy 存储库放回去时,第二个构建通过了。
猜你喜欢
  • 2023-04-11
  • 1970-01-01
  • 1970-01-01
  • 2012-08-31
  • 2021-03-09
  • 2011-05-19
  • 1970-01-01
  • 2017-02-22
  • 2014-03-20
相关资源
最近更新 更多