【问题标题】:Logback dependency preventing SBT running offlineLogback 依赖阻止 SBT 离线运行
【发布时间】:2014-05-26 01:12:24
【问题描述】:

这是对previous question 的改进,更接近问题的原因。

我正在尝试确认我可以离线运行我的 SBT 项目。我可以,除非 logback 是我的 libraryDependencies 之一。为什么 logback 会触发问题?我做了一个简单的例子,只包含一个 build.sbt 和一个“hello world”应用程序......

build.sbt 用一堆随机依赖来证明这一点:

name := "testProject"

version := "0.0.1"

scalaVersion := "2.10.3"

libraryDependencies ++= Seq(
    "org.apache.commons" % "commons-math3" % "3.2",
    "com.amazonaws" % "aws-java-sdk" % "1.4.0.1",
    "ch.qos.logback" % "logback-classic" % "1.1.1",
    "com.typesafe.akka" %% "akka-actor" % "2.3.1", 
    "com.typesafe.akka" %% "akka-remote" % "2.3.1",
    "org.scalaz" %% "scalaz-core" % "7.0.3"
)

我的步骤

  1. 在我的项目中删除~/.ivy2~/.sbttarget/,以确保
  2. 确保连接到互联网,然后执行sbt run。我的 hello world 运行成功
  3. 断开互联网连接
  4. sbt clean
  5. sbt run。构建失败,logback 作为未解决的依赖项
  6. 再次删除 logback 依赖和sbt run。 Hello World 运行。

这是第 5 步的错误:

[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.fusesource.jansi#jansi;1.4 ...
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  ::          UNRESOLVED DEPENDENCIES         ::
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  :: ch.qos.logback#logback-classic;1.1.1: not found
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
sbt.ResolveException: unresolved dependency: ch.qos.logback#logback-classic;1.1.1: not found

更新:

在 SBT 中使用last 命令有一个很多 用于依赖解析的调试信息。下面是一个 Akka 解析成功的例子:

[info] Resolving com.typesafe.akka#akka-actor_2.10;2.3.1 ...
[debug] sbt-chain: Checking cache for: dependency: com.typesafe.akka#akka-actor_2.10;2.3.1 {compile=[default(compile)]}
[debug] sbt-chain: module revision found in cache: com.typesafe.akka#akka-actor_2.10;2.3.1
[debug]     local: revision in cache: com.typesafe.akka#akka-actor_2.10;2.3.1
[debug]     found com.typesafe.akka#akka-actor_2.10;2.3.1 in sbt-chain
[debug] == resolving dependencies testproject#testproject_2.10;0.0.1->com.typesafe.akka#akka-actor_2.10;2.3.1 [compile->runtime]
[debug] == resolving dependencies testproject#testproject_2.10;0.0.1->com.typesafe.akka#akka-actor_2.10;2.3.1 [compile->compile]
[debug] == resolving dependencies com.typesafe.akka#akka-actor_2.10;2.3.1->org.scala-lang#scala-library;2.10.3 [compile->master(*)]
[debug] == resolving dependencies com.typesafe.akka#akka-actor_2.10;2.3.1->org.scala-lang#scala-library;2.10.3 [compile->compile(*)]
[debug] == resolving dependencies com.typesafe.akka#akka-actor_2.10;2.3.1->com.typesafe#config;1.2.0 [compile->master(*)]

这是 Logback 的失败:

[info] Resolving ch.qos.logback#logback-classic;1.1.1 ...
[debug] sbt-chain: Checking cache for: dependency: ch.qos.logback#logback-classic;1.1.1 {compile=[default(compile)]}
[debug]         tried /home/user/.ivy2/local/ch.qos.logback/logback-classic/1.1.1/ivys/ivy.xml
[debug]     local: no ivy file found for ch.qos.logback#logback-classic;1.1.1
[debug]         tried http://repo1.maven.org/maven2/ch/qos/logback/logback-classic/1.1.1/logback-classic-1.1.1.pom
[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.
[debug]     public: no ivy file found for ch.qos.logback#logback-classic;1.1.1
[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

我可以确认缓存中的以下文件(不是“~/.ivy/local”文件夹):

~/.ivy2/cache/ch.qos.logback/logback-classic$ ls
ivy-1.1.1.xml  ivy-1.1.1.xml.original  ivydata-1.1.1.properties  jars

【问题讨论】:

    标签: scala sbt ivy logback


    【解决方案1】:

    当我尝试它时,该文件确实是从 ~/.ivy2/cache 解析的。我没有 ~/.ivy2/local 因为我不在本地发布。是否有可能有一个 ivysettings.xml 文件(在 Linux 上,尝试 locate ivysettings.xml)与一些 Ivy cache attribute 混淆,比如 resolutionCacheDir?为什么你只对那个罐子有问题仍然是一个谜......

    更新:这似乎是 SBT 0.13.1 中的回归;它在 0.13.0 中工作,正如 OP 自己发现的(见他的回答),它在 0.13.2 中得到修复。

    【讨论】:

    • 另外,如果你不是将这个发布到 sbt 别名的人,你可能想要加入并关注它:groups.google.com/forum/#!topic/simple-build-tool/wHHxpVrxLfU
    • 我找不到 ivysettings 文件,但为了确保我构建了一个新的 VM (CrunchBang) 并且只复制了 jdk、sbt、build.sbt 和 .scala 应用程序文件。我得到了同样的结果。它仍然无法仅找到 logback-classic,并且不存在这样的“本地”目录。假设您在离线时尝试再次运行之前进行了清理?
    • 是的,在 sbt 运行之前,我在断开连接后执行了 sbt clean(删除了目标目录但不触及 ~/.ivy2)。使用您提供的 build.sbt 对我来说一切都很好(以及一个简单的 scala 程序,它只是呼应了它的 args)。
    • 您使用的是 SBT 0.13.1 版吗?
    • 我使用的是 0.13.0。看起来这是 0.13.1 中的回归?
    【解决方案2】:

    它在你的本地常春藤缓存中找不到它,修复它,你的问题就解决了。

    尝试清除您的 ivy 缓存,可能它已损坏。

    【讨论】:

    • 我是这么想的,所以已经多次删除了整个 '.ivy2' 和 '.sbt' 文件夹,但在所有 PC 上仍然遇到同样的问题。
    • 我不是常春藤专家,你能打开调试模式看看它在做什么吗?
    【解决方案3】:

    SBT 0.13.2 在这个问题后 3 天发布,似乎解决了这个问题。我不知道这是否是一个已知问题,但为 SBT 0.13.2 列出的更改包括

    修复 ivy 的 .+ 依赖范围不正确的问题 翻译成 maven。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-29
      • 2015-07-04
      • 1970-01-01
      • 2017-04-08
      • 1970-01-01
      • 1970-01-01
      • 2015-10-12
      • 1970-01-01
      相关资源
      最近更新 更多