是否可以从TaskKey(例如unmanagedClasspath
)和SettingKey(例如baseDirectory
)计算这两个值,以便定义其他设置SettingKey
?
目前的目标是根据定义的依赖关系(sourceGenerators
)和其他设置(classpath
,baseDirectory
,...)定义sourceManaged
。
仅使用SettingKey
可以按照以下方式进行,但在此过程中包含TaskKey
不起作用:
sourceGenerators in Compile <+= (baseDirectory in Compile).
zip(sourceManaged in Compile).map(settingsValues ⇒ ???)
答案 0 :(得分:2)
首先要做的事情是:使用TaskKeys设置SettingKey是不可能的。请参阅sbt。
的官方文档中的.sbt Build Definition和More Kinds of Setting您可以通过以下代码解决它(在sbt 0.12.4及更低版本中)。
sourceGenerators in Compile <+= (baseDirectory, sourceManaged, managedClasspath in Compile) map { (b, s, c) =>
Seq[File]()
}
但是我高度建议使用较新版本的sbt,这些版本提供了许多简化来定义设置和任务之间的关系(请记住,任务可以基于设置的值,但反之亦然)
例如,使用0.13.5,您可以按如下方式执行:
sourceGenerators in Compile += Def.task {
val b = baseDirectory.value
val s = sourceManaged.value
val c = (managedClasspath in Compile).value
Seq[File]()
}.taskValue
显然,在这个过于简单化的示例中,值b
,s
和c
被丢弃,因为它们不用于计算最后一个表达式Seq[File]()
成为结果值。
答案 1 :(得分:0)
作为临时解决方案,我定义了一个自定义的TaskKey,该任务分配了一个元组,从其他SettingKey&amp; TaskKey,然后我通过此自定义键分配sourceGenerators映射。我不知道这是否是一种更直接的方式,不需要定义这样的临时自定义密钥。
val generatorsConfig = TaskKey[(File, File, Classpath)](
"reactive-mongo-generators-config", "Source generators configuration")
generatorsConfig := (
(baseDirectory in Compile).value,
(sourceManaged in Compile).value,
(managedClasspath in Compile).value)
sourceGenerators in Compile <+= generatorsConfig map { d =>
val (base, managed, cp) = d
Seq[File]() // Define according base, managed and classpath
}