首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用TaskKey和SettingKey的值来定义设置?

如何使用TaskKey和SettingKey的值来定义设置?
EN

Stack Overflow用户
提问于 2014-07-14 14:53:22
回答 2查看 1.5K关注 0票数 1

是否可以从TaskKey (例如unmanagedClasspath)和SettingKey (例如baseDirectory)计算两个值,以便定义其他设置SettingKey

当前的目标是根据定义的依赖项( sourceGenerators )和其他设置(baseDirectorysourceManaged、.)来定义baseDirectory

只使用SettingKey可以按以下方式完成,但它不起作用,即在流程中包括TaskKey

代码语言:javascript
复制
sourceGenerators in Compile <+= (baseDirectory in Compile).
  zip(sourceManaged in Compile).map(settingsValues ⇒ ???)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-15 06:15:29

首先要做的事情是:不可能使用SettingKey设置TaskKeys。从sbt的正式文档中参见.sbt构建定义多种设置

您可以通过以下代码来解决这个问题(在SBT0.12.4和更低版本中)。

代码语言:javascript
复制
sourceGenerators in Compile <+= (baseDirectory, sourceManaged, managedClasspath in Compile) map { (b, s, c) =>
  Seq[File]()
}

但是,我强烈建议使用新版本的sbt,该版本为定义设置和任务之间的关系提供了许多简化(请记住,任务可以基于设置的值,反之亦然)。

例如,使用0.13.5,您可以这样做:

代码语言:javascript
复制
sourceGenerators in Compile += Def.task {
  val b = baseDirectory.value
  val s = sourceManaged.value
  val c = (managedClasspath in Compile).value
  Seq[File]()
}.taskValue

显然,在这个过于简单的示例中,bsc的值被丢弃,因为它们不用于计算最后一个成为结果值的表达式Seq[File]()

票数 2
EN

Stack Overflow用户

发布于 2014-07-14 20:03:22

作为一种临时解决方案,我定义了一个自定义TaskKey,它带有一个从其他SettingKey & TaskKey收集值的元组,然后在这个自定义键上分配sourceGenerators映射。我不知道这是否是一种更直接的方式,不需要定义这样的临时定制密钥。

代码语言:javascript
复制
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
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24739424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档