如何强制 sbt 一次获取所需的一切?

Sky*_*ker 5 scala sbt typesafe-activator

我正在一个非常安全的项目中工作,无法通过代理访问 SBT 通常需要的所有在线存储库。我们想一次性获取我们需要的依赖项和传递依赖项。

如何强制 sbt 一次性获取项目所需的所有依赖项,然后只能离线工作?我试过在家里完全做到这一点。然后我复制了以下所有内容:

~/.ivy2/cache
~/.ivy2/local
$ACTIVATOR_HOME/repository
Run Code Online (Sandbox Code Playgroud)

SBT即使使用sbt "set offline := true" rungo执行并尝试在线获取所有内容......仍然很痛苦。然后终于打破并抱怨它没有找到一些依赖。

更新:我注意到另一个麻烦来源,但还不能断定它是 OP 损坏构建问题的罪魁祸首。我从 Linux(Ubuntu 机器)构建并获取项目的依赖项,然后将所有文件复制到企业 Windows 7 Pro 环境中。我发现许多属性文件~/.ivy2/cache在 Ubuntu 中引用了激活器存储库目录的绝对路径,这在 Windows env 中当然是不正确的,例如

#ivy cached data file for ch.qos.logback#logback-classic;1.1.3
#Fri Mar 10 08:39:37 CET 2017
artifact\:ivy\#ivy.original\#xml\#-1844423371.location=/opt/dev/activator/1.3.12/repository/ch.qos.logback/logback-classic/1.1.3/ivys/ivy.xml
artifact\:ivy\#ivy\#xml\#1016118566.is-local=true
artifact\:ivy\#ivy\#xml\#1016118566.location=/opt/dev/activator/1.3.12/repository/ch.qos.logback/logback-classic/1.1.3/ivys/ivy.xml
artifact\:ivy\#ivy.original\#xml\#-1844423371.is-local=true
artifact\:ivy\#ivy\#xml\#1016118566.exists=true
artifact\:logback-classic\#jar\#jar\#804750561.is-local=true
artifact\:logback-classic\#jar\#jar\#804750561.location=/opt/dev/activator/1.3.12/repository/ch.qos.logback/logback-classic/1.1.3/jars/logback-classic.jar
artifact\:ivy\#ivy.original\#xml\#-1844423371.exists=true
artifact\:logback-classic\#jar\#jar\#804750561.exists=true
Run Code Online (Sandbox Code Playgroud)

所以我去做了一个查找和替换,但构建仍然不起作用。将数千个属性文件硬编码到激活器位置的绝对路径看起来并不是一个好主意。我宁愿他们为此使用环境变量。

Mir*_*sej 2

也许你可以试试快递?它不仅提供

更好的离线模式 - 如果快照依赖项位于缓存中,则可以安全地使用这些依赖项(如果 SBT 无法检查更新,则它往往会尝试并失败)

而且由于并行工件下载,速度也比 Ivy 快得多。该项目虽然年轻但前景广阔。