通过范围的入门指南,似乎意味着我应该能够做到这样的事情:
(其中Build.scala包含来自getting started guide的sampleKeyA / B / C / D)
sampleKeyA := "value 1"
sampleKeyA in compile := "value 2"
compile <<= (compile in Compile, sampleKeyA) map { (result, s) =>
println("sample key: " + s)
result
}
但是当我运行sbt compile时,为sampleKeyA打印的值是“value 1”,而不是我期望的“value 2”。我错过了什么?
答案 0 :(得分:4)
首先,在编译中定义 sampleKeyA当然是有效的,因为它将设置范围限定为编译任务。
其次,您得到值1 ,因为您使用的是没有上述范围的 sampleKeyA 。在编译中将其更改为 sampleKeyA,您将获得值2 。
要看到这一点,只需启动一个“空”的sbt会话并执行以下命令:
> set SettingKey[String]("sampleKeyA") := "value 1"
[info] Reapplying settings...
[info] Set current project to default-a57b70 (in build file:/Users/heiko/tmp/sbt/)
> set SettingKey[String]("sampleKeyA") in compile := "value 2"
[info] Reapplying settings...
[info] Set current project to default-a57b70 (in build file:/Users/heiko/tmp/sbt/)
> sampleKeyA
[info] value 1
> sampleKeyA(for compile)
[info] value 2
答案 1 :(得分:2)
它选择了value 1
,因为value 2
的范围是编译,但是你得到了通用版本。如果你写了sampleKeyA in Compile
,它就可以了。或者,也许是in compile
- 我认为声明是不正确的,因为范围compile
并不存在。