我目前正在完成Flyway的SBT 插件。
Flyway 有 6 个基本命令,它们将映射到 6 个 TaskKey。
这些可以由 Flyway 对象上的大量设置器(20+)配置。然后,这些设置中的每一个都将映射到一个 SettingKey(每个 setter 一个)。
但是,我在解析 TaskKey 时可以传递的参数数量受到限制。是否有更好/更具可扩展性(如支持更多设置键)来解决这个问题?或者更笼统地说:
处理与TaskKey 相关的大量 SettingKey的最佳方法是什么?
一种解决方法是将多个相关键捆绑到辅助对象中。例如,在这里我正在创建一个辅助键"_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])
这样一来,已经将八个相关键捕获到一个辅助对象中。您可以对其他组重复此操作。
我将 'state' artument 传递给 task 并直接从那里提取所有 SettingKeys。
恕我直言,0.13 中会有替代方式,但您最好搜索 sbt 邮件列表。
PS我计划根据需要支持0.12,所以这是我唯一的解决方案。