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