【问题标题】:SBT 0.13.1 offlineSBT 0.13.1 离线
【发布时间】:2014-05-25 17:18:37
【问题描述】:

我正在尝试了解 SBT 0.13.1 的离线使用。我的目标是将任何必要的东西带到 U 盘上的离线环境中。我认为如果复制了 ivy 缓存,那么 SBT 可以从中提取所需的一切,但似乎并非如此。

例如...

为了确定,我将首先删除 .ivy2 文件夹。现在,在线时我使用以下build.sbtproject/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"
)

project/plugins.sbt:

addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "2.4.0")

Sill 在我离线的同一台计算机上,现在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'。

更新:

添加 .ivy2/local 的建议无效。它给出了许多 MalformedURLException

[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 的一些交互引起的。我已经为我的问题 here 创建了一个更清晰的版本,并且我接受了表明这“应该”开箱即用的答案。

【问题讨论】:

  • 你试过set offline := true吗?另见Dependency Management
  • 试过了,但没有任何变化。我对离线 := true 的理解是它会阻止 SNAPSHOT 不断检查,但无论如何我都没有直接使用任何快照。

标签: scala sbt ivy


【解决方案1】:

如果您在线构建项目,那么您可以在之后离线。 基本上,您只需要将 ~/.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)。这里没有任何问题 - 你之前已经成功构建过它吗?除了我不知道它需要的这两个文件夹之外,可能还有另一个组件,但它似乎确实可以毫无问题地解决常春藤缓存中的依赖关系。
【解决方案2】:

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

resolvers += "ivy2 cache" at "/home/user/.ivy2/cache"

让我知道这是否有效,我也很好奇。

编辑:

我试过了,sbt 确实在你的 ivy2 缓存中查找,进入你的 build.sbt 并添加这一行:

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

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

【讨论】:

  • 似乎已经修复了 scala-lang 依赖项。现在它只是在 logback 上被打破了。它使用错误的命名约定 logback-classic/1.1.1/ivys/ivy.xml 而不是 logback-classic/ivy-1.1.1.xml
  • 我猜它与(Resolver.ivyStylePatterns)有关,它将ivys部分附加到路径中,不幸的是这只是一个猜测。
猜你喜欢
  • 2016-04-04
  • 2014-05-26
  • 1970-01-01
  • 2014-05-11
  • 2014-03-24
  • 1970-01-01
  • 1970-01-01
  • 2015-03-19
  • 1970-01-01
相关资源
最近更新 更多