【发布时间】:2017-08-01 02:08:45
【问题描述】:
我在一个非常注重安全的地方从事一个项目,无法通过代理访问 SBT 通常需要的所有在线存储库。我们想一次性获取我们需要的依赖和传递依赖。
如何强制 sbt 一次性获取项目所需的所有依赖项,并且只能离线工作?我已经尝试在家中做到这一点。然后我复制了以下所有内容:
~/.ivy2/cache
~/.ivy2/local
$ACTIVATOR_HOME/repository
但即使使用sbt "set offline := true" run 执行,SBT 仍然会尝试在线获取所有内容……很痛苦。然后终于打破并抱怨它没有找到一些依赖关系。
更新:我注意到另一个问题来源,但还不能断定它是 OP 损坏构建问题的罪魁祸首。我从 Linux(Ubuntu 机器)构建并获取项目的依赖项,然后将所有文件复制到企业 Windows 7 Pro 环境。我发现~/.ivy2/cache 下的许多属性文件引用了 Ubuntu 中激活器存储库目录的绝对路径,这在 Windows 环境中当然是不正确的,例如
#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
所以我去查找并替换,但构建仍然无法正常工作。将数千个属性文件硬编码到激活器位置的绝对路径似乎不是一个绝妙的主意。我宁愿他们为此使用环境变量。
【问题讨论】:
-
是否有任何依赖项标记为
SNAPSHOT?~/.ivy2/cache的全部意义在于避免上网。这让我觉得你正在做一些事情来颠覆这种行为。 -
@wheaties,谢谢你的帮助!不,不
SNAPSHOTs 至少不是直接的,它在发布版本上失败,而原始 PC 可以工作。 -
我建议,如果您将任何内容从 Linux 机器复制并粘贴到 Windows 机器,请运行以下命令:
sbt clean。是的,我知道,这就是您要避免的,但请记住,不应假定文件夹结构和设置在整个操作系统中都是静态的。
标签: scala sbt typesafe-activator