为什么sbt不断下载我的快照依赖关系?
我有一个依赖于两个快照依赖项的SBT项目。每次构建它时,它都会转到远程存储库以获取依赖关系。即使我设置了offline := true
,情况也是如此。为什么sbt不断下载我的快照依赖关系?
当我看着它是如何解决本地依赖问题时,构建说它正在查找“本地”,即~/.ivy2/local/...
- 这是一个不存在的目录。
罐子在~/.ivy2/cache/...
,这是SBT在从远程服务器拉取依赖时下载它们的地方。
我已经搜索了我的.sbt和.scala构建文件,并且字符串“本地”没有出现在与存储库或缓存相关的连接中。
SBT的版本是0.13.11,建立在scala 2.11.8上。
SBT为什么要这样做,我怎样才能看到缓存的罐子?
如果你想阻止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
相关信息:
- http://www.scala-sbt.org/0.13/docs/Proxy-Repositories.html
- How to prevent SBT from trying to download from official repositories?
编辑
如果你想用你~/.m2
缓存:
[repositories]
mirror-central: file:////home/XXXXX/.m2/repository
mirror-maven-central-org: file:////home/XXXXX/.m2/repository
...
问题是,它没有使用本地常青藤缓存文件在缓存中。你的建议是一种解决方法,但它并没有真正解决我提出的问题。 – psfblair
的确,这是一种解决方法,因为我认为这是不可能的。让我们等待更多的答案,如果我错了,我会删除这个答复。 –
这显然是因为在我的Ivy缓存中,我有一个名为〜/ .ivy2/cache/com.xxx/xxx-utils/ivy-2.3.2-SNAPSHOT.xml.original的文件,它正在尝试和失败解析。我不确定这个文件来自哪里;可以想象,它在很久以前就被人手动放在那里。
我似乎误解了这一点。我创建了一个本地常青藤资源库,并通过构建。然后,我尝试删除〜/下的本地Ivy存储库。ivy2/local和我的构建工作 - 但后来我尝试使用相同的快照jar构建一个不同的项目,并且构建失败。当我将本地常青藤资料库放回第二个构建时, – psfblair
〜/ .ivy2/local目录是您可以使用publish-local发布的默认本地Ivy存储库。 (见http://www.scala-sbt.org/0.12.4/docs/Detailed-Topics/Publishing.html)所以问题在于SBT根本没有在看本地缓存。 – psfblair
关于这个问题的更多讨论在这里:http://stackoverflow.com/questions/24395307/working-offline-with-sbt-and-snapshot-dependencies – psfblair