1

我目前正在完成FlywaySBT 插件

Flyway 有 6 个基本命令,它们将映射到 6 个 TaskKey。

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

但是,我在解析 TaskKey 时可以传递的参数数量受到限制。是否有更好/更具可扩展性(如支持更多设置键)来解决这个问题?或者更笼统地说:

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

4

2 回答 2

1

一种解决方法是将多个相关键捆绑到辅助对象中。例如,在这里我正在创建一个辅助键"_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])

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

于 2013-07-13T20:33:26.067 回答
0

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

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

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

PS我计划根据需要支持0.12,所以这是我唯一的解决方案。

于 2013-07-14T16:07:05.297 回答