我目前正在为Flyway完成 SBT插件。
Flyway有6个基本命令,可以映射到6个TaskKeys。
这些可以由Flyway对象上的大量setter(20+)配置。然后,这些设置中的每一个都将映射到SettingKey(每个setter一个)。
然而,我在解析TaskKey时可以通过限制参数数量。是否有更好/更具可扩展性(如支持甚至更多的SettingKeys)来解决这个问题?或者更普遍地说:
处理大量与TaskKey 相关的SettingKeys的最佳方法是什么?
答案 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。
恕我直言,在0.13中会有替代方式,但你最好搜索sbt邮件列表。
PS我计划根据需要支持0.12长,这对我来说是唯一的解决方案。