【问题标题】:Why scalaInstance is different from scalaVersion in sbt?为什么 scalaInstance 与 sbt 中的 scalaVersion 不同?
【发布时间】:2014-07-10 01:19:48
【问题描述】:

build.sbt

val Backend = config("backend")

inConfig(Backend)(Defaults.configSettings)

scalaVersion in Backend := "2.11.2-SNAPSHOT"

sbt 复制:

> show backend:scalaInstance
[info] Scala instance{version label 2.10.4, actual version 2.10.4, library jar: /home/masgui/.sbt/boot/scala-2.10.4/lib/scala-library.jar, compiler jar: /home/masgui/.sbt/boot/scala-2.10.4/lib/scala-compiler.jar}

> backend:scalaVersion
[info] 2.11.2-SNAPSHOT

当前工作:

lazy val v = Project(
    id = "a",
    base = file("woot"),
    settings = Project.defaultSettings ++ Seq(
        offline := true,
        scalaVersion := "2.11.2-SNAPSHOT"
    )
)

// ...
scalaInstance in (Backend, Revolver.reStart) := (scalaInstance in v).value

编辑

当我将Classpaths.ivyBaseSettings 添加到后端时,它会忽略ivyConfigurations += Backend

> show ivyConfigurations
[info] List(..., backend)

但是

> backend:update
Cannot add dependency 'com.scalakata#backend_2.11;0.1-20140706T182100' to configuration 'backend' of module com.scalakata#plugin;0.1-20140709T150113 because this configuration doesn't exist!

编辑 我用你以前的一个遮阳篷解决了这个问题:Copy a single dependency jar into a folder via build.sbt

【问题讨论】:

    标签: sbt


    【解决方案1】:

    TL;DR;

    您还必须将Classpaths.ivyBaseSettingsClasspaths.jvmBaseSettingsDefaults.compileBase 添加到您的Backend 配置中。

    build.sbt

    val Backend = config("backend") 
    
    inConfig(Backend)(Classpaths.ivyBaseSettings ++ Classpaths.jvmBaseSettings ++ Defaults.compileBase ++ Defaults.configSettings)
    
    scalaVersion in Backend := "2.11.1"
    

    加长版

    任务scalaInstance在你的Backend配置中没有定义,所以sbt委托给默认的scalaInstance

    [info] Delegates:
    [info]  backend:scalaInstance
    [info]  *:scalaInstance
    [info]  {.}/backend:scalaInstance
    [info]  {.}/*:scalaInstance
    [info]  */backend:scalaInstance
    [info]  */*:scalaInstance
    

    如果你检查它的定义位置,你可以看到它在*:scalaInstance

    > inspect definitions scalaInstance
    [info] 
    [info]  *:scalaInstance
    

    如果您想定义它,您必须将 Defaults.compileBase 添加到您的 Backend 配置中。

    您可以确认它没有在Backend 范围内定义。

    > inspect definitions scalaInstance
    [info] 
    [info]  *:scalaInstance
    [info]  backend:scalaInstance
    

    但这还不够,如果你检查show backend:scalaInstance的输出,你会发现它仍然是2.10.x

    > show backend:scalaInstance
    [info] Scala instance{version label 2.11.1, actual version 2.10.4, library jar: /home/lpiepiora/.sbt/boot/scala-2.10.4/lib/scala-library.jar, compiler jar: /home/lpiepiora/.sbt/boot/scala-2.10.4/lib/scala-compiler.jar}
    

    我们需要配置正确的类路径,添加Classpaths.ivyBaseSettings ++ Classpaths.jvmBaseSettings

    show backend:scalaInstance 显示正确的版本。

    > show backend:scalaInstance
    [info] Scala instance{version label 2.11.1, actual version 2.11.1, library jar: /home/lpiepiora/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.11.1.jar, compiler jar: /home/lpiepiora/.ivy2/cache/org.scala-lang/scala-compiler/jars/scala-compiler-2.11.1.jar}
    [success] Total time: 0 s, completed 08-Jul-2014 20:32:18
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-08
      • 1970-01-01
      • 1970-01-01
      • 2013-04-21
      • 1970-01-01
      • 1970-01-01
      • 2013-12-09
      • 1970-01-01
      相关资源
      最近更新 更多