2016-09-15 61 views
1

我有一个依赖于两个快照依赖项的SBT项目。每次构建它时,它都会转到远程存储库以获取依赖关系。即使我设置了offline := true,情况也是如此。为什么sbt不断下载我的快照依赖关系?

当我看着它是如何解决本地依赖问题时,构建说它正在查找“本地”,即~/.ivy2/local/... - 这是一个不存在的目录。

罐子在~/.ivy2/cache/...,这是SBT在从远程服务器拉取依赖时下载它们的地方。

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

SBT的版本是0.13.11,建立在scala 2.11.8上。

SBT为什么要这样做,我怎样才能看到缓存的罐子?

+0

〜/ .ivy2/local目录是您可以使用publish-local发布的默认本地Ivy存储库。 (见http://www.scala-sbt.org/0.12.4/docs/Detailed-Topics/Publishing.html)所以问题在于SBT根本没有在看本地缓存。 – psfblair

+0

关于这个问题的更多讨论在这里:http://stackoverflow.com/questions/24395307/working-offline-with-sbt-and-snapshot-dependencies – psfblair

回答

0

如果你想阻止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应包含什么,你需要离线(部分)镜)

然后调用sbtsbt.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 
    ... 
+0

问题是,它没有使用本地常青藤缓存文件在缓存中。你的建议是一种解决方法,但它并没有真正解决我提出的问题。 – psfblair

+0

的确,这是一种解决方法,因为我认为这是不可能的。让我们等待更多的答案,如果我错了,我会删除这个答复。 –

0

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

+0

我似乎误解了这一点。我创建了一个本地常青藤资源库,并通过构建。然后,我尝试删除〜/下的本地Ivy存储库。ivy2/local和我的构建工作 - 但后来我尝试使用相同的快照jar构建一个不同的项目,并且构建失败。当我将本地常青藤资料库放回第二个构建时, – psfblair