我无法理解以下表达式之间的区别。表达式减少了 - 现实世界的情况下有更多的设置分布在单独的对象中。
直接指定为序列
Seq(libraryDependencies +=
"org.openjdk.jmh" % "jmh-core" % "1.6.2" % "compile")
包裹在inConfig
inConfig(Compile)(libraryDependencies +=
"org.openjdk.jmh" % "jmh-core" % "1.6.2" % "compile")
在这两种情况下,show compile:libraryDependencies
都显示相同的
[info] List(org.scala-lang:scala-library:2.10.4, org.openjdk.jmh:jmh-core:1.6.2:compile)
但是对于show compile:managedClasspath
,对JMH的依赖仅在第一种情况下显示。因此,由于无法解析的类,正常的编译器运行失败。
请解释或指出两种情况之间的逻辑差异。
答案 0 :(得分:1)
TLDR:在声明% "compile"
时使用Compile
libraryDependencies
您sbt
尝试使用Ivy的模块配置(例如compile
)作为其设置范围之一的差距(可能是错误)
供参考:
问题在于,目前,您可以在值级别声明配置:
"org.openjdk.jmh" % "jmh-core" % "1.6.2" % "compile"
和关键级别:
inConfig(Compile)(libraryDependencies += xyz)
或者:
libraryDependencies in Compile += xyz
正如您在两个示例中所述,show compile:libraryDependencies
显示相同的序列,但show libraryDependencies
表明您仅在jmh-core
的{{1}}轴中添加了Compile
:
libraryDependencies
show libraryDependencies
[info] List(org.scala-lang:scala-library:2.10.4, org.openjdk.jmh:jmh-core:1.6.2:compile)
show libraryDependencies
然后导致[info] List(org.scala-lang:scala-library:2.10.4)
为何不同。
查看show compile:managedClasspath
输出内容:
inspect actual compile: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
。从那里它最终导致compile
,在你的第二个例子中不包括*:libraryDependencies
。