Scala 阻止SBT脱机运行的回写依赖项
这是对一个更接近问题的模型的改进 我正在尝试确认我可以脱机运行我的SBT项目。我可以,除非logback是我的库依赖项之一。为什么logback会引发问题?我做了一个简单的例子,只包含一个build.sbt和一个“hello world”应用程序 build.sbt有一系列随机依赖项来证明这一点:Scala 阻止SBT脱机运行的回写依赖项,scala,sbt,ivy,logback,Scala,Sbt,Ivy,Logback,这是对一个更接近问题的模型的改进 我正在尝试确认我可以脱机运行我的SBT项目。我可以,除非logback是我的库依赖项之一。为什么logback会引发问题?我做了一个简单的例子,只包含一个build.sbt和一个“hello world”应用程序 build.sbt有一系列随机依赖项来证明这一点: name := "testProject" version := "0.0.1" scalaVersion := "2.10.3" libraryDependencies ++= Seq(
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"
)
我的脚步
~/.ivy2
,~/.sbt
和目标/
,以确保sbt
。我的hello world运行成功sbt-clean
sbt运行
。生成失败,作为未解析的依赖项进行了回登录sbt
。你好,世界跑步[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(*)]
以下是登录失败的原因:
[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解析的。我没有~/.ivy2/local,因为我不在本地发布。您是否有可能有一个ivysettings.xml文件(在Linux上,请尝试
locate ivysettings.xml
)正在与resolutionCacheDir等文件发生冲突?这仍然是一个谜,为什么你只有一个罐子有问题
更新:这似乎是SBT 0.13.1中的回归;它在0.13.0中起作用,正如OP自己发现的(见他的答案),它在0.13.2中被修复。SBT 0.13.2在这个问题出现3天后发布,似乎解决了这个问题。我不知道这是否是一个已知问题,但SBT 0.13.2列出的更改包括 修复常春藤的.+依赖范围不正确的问题 翻译成maven
我就是这么想的,所以我多次删除了整个“.ivy2”和“.sbt”文件夹,但在所有电脑上仍然遇到相同的问题。我不是常春藤专家,你能启用调试模式查看它在做什么吗?另外,如果你不是将此发布到sbt别名的人,您可能想插话并遵循它:我找不到ivysettings文件,但只是为了确保我构建了一个新的VM(CrunchBang),并且只复制了jdk、sbt、build.sbt和.scala应用程序文件。我得到了同样的结果。它仍然无法找到唯一的logback classic,并且不存在这样的“本地”目录。假设您在脱机时再次尝试运行之前进行了清理?是的,在断开连接后,在sbt运行之前,我没有进行sbt清理(这会删除目标目录,但不会触及~/.ivy2)。使用您提供的build.sbt(以及一个简单的scala程序,它只回显其参数),我觉得一切都很好。您使用的是sbt版本0.13.1吗?我使用的是0.13.0。看起来这是0.13.1的回归?
~/.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