如何处理与TaskKey相关的大量(20+)SettingKeys?

时间:2013-07-13 08:47:06

标签: scala sbt

我目前正在为Flyway完成 SBT插件

Flyway有6个基本命令,可以映射到6个TaskKeys。

这些可以由Flyway对象上的大量setter(20+)配置。然后,这些设置中的每一个都将映射到SettingKey(每个setter一个)。

然而,我在解析TaskKey时可以通过限制参数数量。是否有更好/更具可扩展性(如支持甚至更多的SettingKeys)来解决这个问题?或者更普遍地说:

处理大量与TaskKey 相关的SettingKeys的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

解决方法是将多个相关键捆绑到辅助对象中。例如。 here我正在创建一个帮助键"_aux_java"来处理问题:

private val java      = TaskKey[JavaSettings]("_aux_java")
...

val settings = Seq[Setting[_]](
  ...
  java      <<= (systemProperties, javaOptions, fullClasspath, packageBin in Compile,
                 mainClass, javaVersion, javaArchs, workingDirectory) map JavaSettings,
  appbundle <<= (infos, java, bundle, streams) map appbundleTask
)
...

case class JavaSettings(systemProperties: Seq[(String, String)],
                        javaOptions: Seq[String], classpath: Classpath, jarFile: File,
                        mainClassOption: Option[String], javaVersion: String,
                        javaArchs: Seq[String], workingDirectory: Option[File])

这样就可以将八个相关的键捕获到一个辅助对象中。您可以为其他组重复此操作。

答案 1 :(得分:0)

我将'state'artument传递给任务并直接从那里提取所有SettingKeys。

例如: https://github.com/digimead/sbt-dependency-manager/blob/master/src/main/scala/sbt/dependency/manager/Plugin.scala

恕我直言,在0.13中会有替代方式,但你最好搜索sbt邮件列表。

PS我计划根据需要支持0.12长,这对我来说是唯一的解决方案。