Sbt 解释定义libraryDependencies的表达式之间的差异

Sbt 解释定义libraryDependencies的表达式之间的差异,sbt,Sbt,我无法理解下列表达式之间的区别。表达式是一个简化的——在现实世界中,有更多的设置分布在不同的对象中 直接指定为序列 Seq(libraryDependencies += "org.openjdk.jmh" % "jmh-core" % "1.6.2" % "compile") 包装在图中的inConfig inConfig(Compile)(libraryDependencies += "org.openjdk.jmh" % "jmh-core" % "1.6.2" % "compi

我无法理解下列表达式之间的区别。表达式是一个简化的——在现实世界中,有更多的设置分布在不同的对象中

  • 直接指定为序列

    Seq(libraryDependencies +=
      "org.openjdk.jmh" % "jmh-core" % "1.6.2" % "compile")
    
  • 包装在图中的
    inConfig

    inConfig(Compile)(libraryDependencies +=
      "org.openjdk.jmh" % "jmh-core" % "1.6.2" % "compile")
    
  • 在这两种情况下,
    显示编译:libraryDependencies
    显示相同

    [info] List(org.scala-lang:scala-library:2.10.4, org.openjdk.jmh:jmh-core:1.6.2:compile)
    
    但是对于
    showcile:managedClasspath
    来说,对JMH的依赖关系仅在第一种情况下显示。因此,由于无法解析类,正常编译器运行失败


    请解释或指出这两种情况之间的逻辑差异。

    TLDR:在声明
    库依赖项时,请使用
    %compile
    而不是
    compile

    [info] List(org.scala-lang:scala-library:2.10.4, org.openjdk.jmh:jmh-core:1.6.2:compile)
    
    [info] List(org.scala-lang:scala-library:2.10.4)
    

    您看到的是
    sbt
    如何尝试使用Ivy的模块配置(例如
    compile
    )作为其设置范围之一的一个漏洞,可能是一个bug

    供参考:


    问题在于,目前,您可以在以下两个值级别声明配置:

      "org.openjdk.jmh" % "jmh-core" % "1.6.2" % "compile"
    
    关键层面:

      inConfig(Compile)(libraryDependencies += xyz)
    
    或者:

      libraryDependencies in Compile += xyz
    
    正如您在两个示例中所说的那样,
    show compile:libraryDependencies
    显示了相同的序列,但是
    show libraryDependencies
    表明您只在
    libraryDependencies
    compile
    轴中添加了
    jmh core

  • 显示库依赖关系

    [info] List(org.scala-lang:scala-library:2.10.4, org.openjdk.jmh:jmh-core:1.6.2:compile)
    
    [info] List(org.scala-lang:scala-library:2.10.4)
    
  • 显示库依赖关系

    [info] List(org.scala-lang:scala-library:2.10.4, org.openjdk.jmh:jmh-core:1.6.2:compile)
    
    [info] List(org.scala-lang:scala-library:2.10.4)
    
  • 这就引出了为什么
    show compile:managedClasspath
    不同

    看看什么
    检查实际编译:managedClasspath
    输出:

    [info] Task: scala.collection.Seq[sbt.Attributed[java.io.File]]
    [info] Description:
    [info]  The classpath consisting of external, managed library dependencies.
    [info] Provided by:
    [info]  {file:/Users/dnw/Desktop/t-2015-04-08.0540/}t-2015-04-08-0540/compile:managedClasspath
    [info] Defined at:
    [info]  (sbt.Classpaths) Defaults.scala:991
    [info] Dependencies:
    [info]  *:update
    [info]  */*:classpathTypes
    [info]  compile:classpathConfiguration
    [info]  compile:managedClasspath::streams
    [info] Reverse dependencies:
    [info]  compile:externalDependencyClasspath
    [info] Delegates:
    [info]  compile:managedClasspath
    [info]  *:managedClasspath
    [info]  {.}/compile:managedClasspath
    [info]  {.}/*:managedClasspath
    [info]  */compile:managedClasspath
    [info]  */*:managedClasspath
    [info] Related:
    [info]  test:managedClasspath
    [info]  runtime:managedClasspath
    

    需要注意的是,它依赖于
    *:update
    ,而这并不局限于
    编译。从那里,它最终导致了
    *:libraryDependencies
    ,在您的第二个示例中,它不包括
    jmh-core

    ,感谢您的解释。我想我必须努力工作,让我的思想围绕着这样一个事实:
    *
    不是一个通配符。可能是