2017-03-10 50 views
4

我正在一个非常安全的地方工作,没有通过代理访问SBT通常需要的所有在线存储库。我们想要获取我们需要的依赖关系和传递依赖关系。如何强制sbt获取一次所需的所有内容?

如何强制sbt获取项目所需的所有依赖关系一次,从那里开始,只能脱机工作?我已经尝试过从家里做到这一点。然后我复制了一切下:

~/.ivy2/cache 
~/.ivy2/local 
$ACTIVATOR_HOME/repository 

但仍SBT即使与sbt "set offline := true" run而被执行,并尝试获取网上的一切......是一种痛苦。然后终于休息并抱怨它没有发现一些依赖。

UPDATE:我注意到另一个麻烦来源,但还不能断定它是OP破解构建问题的罪魁祸首。我从Linux(Ubuntu box)构建并获取项目的依赖项,然后将所有文件复制到公司的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 

所以我去了,找到并替换,但构建仍然无法正常工作。看起来好像有一个绝妙的主意,那就是拥有数以千计的属性文件硬编码激活码位置的绝对路径。我宁愿他们使用一个环境变量。

+3

您的任何依赖标记为“SNAPSHOT”吗? '〜/ .ivy2/cache'的全部内容是为了避免上网。这导致我认为你正在做一些事情来颠覆这种行为。 – wheaties

+0

@wheaties,谢谢你的帮助!不,不是'SNAPSHOT's至少不是直接的,它在发布的版本上失败,而它的起源PC工作。 –

+1

我会建议如果你复制并粘贴任何东西从一个Linux机器到一个Windows机器,你运行以下命令:'sbt clean'。是的,我知道,这就是你想要避免的,但要记住,不应该假设文件夹结构和设置在OS中是静态的。 – wheaties

回答

1

也许你可以试试coursier? 不只是它提供

更好的离线模式 - 一个可以安全地与快照依赖工作,如果这些都是在缓存中(SBT倾向于尝试,如果它不能检查更新失败)

而且是由于并行工件下载,比常青藤要快得多。该项目年轻但很有前途。

相关问题