是否可以从TaskKey (例如unmanagedClasspath)和SettingKey (例如baseDirectory)计算两个值,以便定义其他设置SettingKey
当前的目标是根据定义的依赖项( sourceGenerators )和其他设置(baseDirectory、sourceManaged、.)来定义baseDirectory。
只使用SettingKey可以按以下方式完成,但它不起作用,即在流程中包括TaskKey:
sourceGenerators in Compile <+= (baseDirectory in Compile).
zip(sourceManaged in Compile).map(settingsValues ⇒ ???)发布于 2014-07-15 06:15:29
首先要做的事情是:不可能使用SettingKey设置TaskKeys。从sbt的正式文档中参见.sbt构建定义和多种设置。
您可以通过以下代码来解决这个问题(在SBT0.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]()。
发布于 2014-07-14 20:03:22
作为一种临时解决方案,我定义了一个自定义TaskKey,它带有一个从其他SettingKey & 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
}https://stackoverflow.com/questions/24739424
复制相似问题