Scala SBT 0.13.1离线

Scala SBT 0.13.1离线,scala,sbt,ivy,Scala,Sbt,Ivy,我试图理解SBT 0.13.1的离线使用。我的目标是用U盘将任何必要的东西带到离线环境中。我认为,如果常春藤缓存被复制,那么SBT可以从中提取它所需要的一切,但事实似乎并非如此 例如 我将从删除.ivy2文件夹开始,只是为了确定。现在,在联机时,我使用以下build.sbt和project/plugins.sbt文件来创建我的eclipse项目。从SBT 0.13.1开始 build.sbt: name := "TestProject" version := "0.0.1" scalaVer

我试图理解SBT 0.13.1的离线使用。我的目标是用U盘将任何必要的东西带到离线环境中。我认为,如果常春藤缓存被复制,那么SBT可以从中提取它所需要的一切,但事实似乎并非如此

例如

我将从删除.ivy2文件夹开始,只是为了确定。现在,在联机时,我使用以下
build.sbt
project/plugins.sbt
文件来创建我的eclipse项目。从SBT 0.13.1开始

build.sbt:

name := "TestProject"

version := "0.0.1"

scalaVersion := "2.10.3"

libraryDependencies ++= Seq(
    "org.apache.commons" % "commons-math3" % "3.2",
    "ch.qos.logback" % "logback-classic" % "1.1.1"
)
addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "2.4.0")
项目/插件。sbt:

name := "TestProject"

version := "0.0.1"

scalaVersion := "2.10.3"

libraryDependencies ++= Seq(
    "org.apache.commons" % "commons-math3" % "3.2",
    "ch.qos.logback" % "logback-classic" % "1.1.1"
)
addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "2.4.0")
我在同一台计算机上离线,现在
sbt clean eclipse
给出了许多未解决的依赖性错误。例如

[warn] Host repo1.maven.org not found. url=http://repo1.maven.org/maven2/org/scala-lang/scala-library/2.10.3/scala-library-2.10.3.pom
[info] You probably access the destination server through a proxy server that is not well configured.
[warn]  module not found: org.scala-lang#scala-library;2.10.3
[warn] ==== local: tried
[warn]   /home/user/.ivy2/local/org.scala-lang/scala-library/2.10.3/ivys/ivy.xml
[warn] ==== public: tried
[warn]   http://repo1.maven.org/maven2/org/scala-lang/scala-library/2.10.3/scala-library-2.10.3.pom
[info] Resolving ch.qos.logback#logback-classic;1.1.1 ...
[warn] Host repo1.maven.org not found. url=http://repo1.maven.org/maven2/ch/qos/logback/logback-classic/1.1.1/logback-classic-1.1.1.pom
[info] You probably access the destination server through a proxy server that is not well configured.
[warn]  module not found: ch.qos.logback#logback-classic;1.1.1
[warn] ==== local: tried
[warn]   /home/user/.ivy2/local/ch.qos.logback/logback-classic/1.1.1/ivys/ivy.xml
[warn] ==== public: tried
[warn]   http://repo1.maven.org/maven2/ch/qos/logback/logback-classic/1.1.1/logback-classic-1.1.1.pom
[info] Resolving org.scala-lang#scala-reflect;2.10.3 ...
[warn] Host repo1.maven.org not found. url=http://repo1.maven.org/maven2/org/scala-lang/scala-reflect/2.10.3/scala-reflect-2.10.3.pom
[info] You probably access the destination server through a proxy server that is not well configured.
[warn]  module not found: org.scala-lang#scala-reflect;2.10.3
[warn] ==== local: tried
[warn]   /home/user/.ivy2/local/org.scala-lang/scala-reflect/2.10.3/ivys/ivy.xml
[warn] ==== public: tried
[warn]   http://repo1.maven.org/maven2/org/scala-lang/scala-reflect/2.10.3/scala-reflect-2.10.3.pom
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  ::          UNRESOLVED DEPENDENCIES         ::
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  :: org.scala-lang#scala-library;2.10.3: not found
[warn]  :: ch.qos.logback#logback-classic;1.1.1: not found
[warn]  :: org.scala-lang#scala-reflect;2.10.3: not found
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
脱机工作时真的不可能清洁吗

我注意到SBT正在查看
.ivy2/local
,但没有这样的文件夹。仅“.ivy2/cache”

更新:

name := "TestProject"

version := "0.0.1"

scalaVersion := "2.10.3"

libraryDependencies ++= Seq(
    "org.apache.commons" % "commons-math3" % "3.2",
    "ch.qos.logback" % "logback-classic" % "1.1.1"
)
addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "2.4.0")
建议添加。ivy2/local无效。它给人许多畸形的感觉

[warn]  :: org.scala-lang#scala-library;2.10.3: ivy2 cache: unable to get resource for org/scala-lang#scala-library;2.10.3: res=/home/user/.ivy2/cache/org/scala-lang/scala-library/2.10.3/scala-library-2.10.3.pom: java.net.MalformedURLException: no protocol: /home/user/.ivy2/cache/org/scala-lang/scala-library/2.10.3/scala-library-2.10.3.pom
它正在寻找一个目录org/scala-lang等,但缓存中的目录是org.scala-lang的形式

更新2


这个问题似乎是由于与logback的一些交互引起的。我已经为我的问题创建了一个更清晰的版本,并且我接受了这个“应该”开箱即用的答案。

我不确定这是否可行,但我想您需要在
Build.scala
(或
Build.sbt
)中添加另一个版本,如下所示:

resolvers += "ivy2 cache" at "/home/user/.ivy2/cache"
让我知道这是否有效,我也很好奇

编辑:

name := "TestProject"

version := "0.0.1"

scalaVersion := "2.10.3"

libraryDependencies ++= Seq(
    "org.apache.commons" % "commons-math3" % "3.2",
    "ch.qos.logback" % "logback-classic" % "1.1.1"
)
addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "2.4.0")
我试过了,sbt确实在你的
ivy2
缓存中查找,进入你的
build.sbt
并添加这一行:

resolvers += Resolver.file("ivy2 cache", file("/path/to/your/ivy2/cache/"))(Resolver.ivyStylePatterns)

现在
SBT
也应该在该目录中查找。

如果您在线构建项目,那么之后就可以脱机。 基本上,您只需要将~/.ivy2文件夹(可能还有~/.sbt文件夹-不确定)从以前执行过构建和依赖项解析的位置复制到您的环境中

在项目中删除target/然后脱机,我可以看到这确实会导致资源被解析

[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[info] Compiling 4 Scala sources to [...]

似乎对我不起作用。脱机时是否以任何方式更改配置?否。我刚刚关闭wifi并重新运行一个基于sbt 0.13.1的项目(我经常使用brew switch sbt x.x.x)。这里没有任何问题-您以前成功地构建了它?除了这两个文件夹之外,可能还有另一个我不知道需要的组件,但它似乎可以毫无问题地从ivy缓存解决依赖关系。似乎已经修复了scala lang依赖关系。现在它的后备箱坏了。它使用了错误的命名约定logback classic/1.1.1/ivys/ivy.xml,而不是logback classic/ivy-1.1.1.xml。我想这与
(Resolver.ivyStylePatterns)
有关,它将
ivys
部分附加到路径中,不幸的是,这只是一个猜测。是否尝试
设置为脱机:=true
?我也试过了,但没有改变。我对offline:=true的理解是,它可以阻止快照不断地检查,但无论如何,我都不会直接使用任何快照。