如何在多个范围内运行某个sbt任务

时间:2015-06-18 15:51:45

标签: scala sbt

我编写了一个sbt插件,可以生成一些资源和资源。在编译范围内工作是硬编码的。

如何让它在测试范围内工作,所以我可以在运行测试时使用该插件,它会查看并输出到正确的文件夹?

例如,在代码的各个方面,我引用与resourceManaged in Compile相关的src/main/resources,但在运行test时,我希望它为resourceManaged in Test时与src/test/resources有关。

如何抽象范围?

1 个答案:

答案 0 :(得分:2)

这是Plugins Best Practices中讨论的主题,特别是Configuration advices部分。

提供原始设置和配置设置

如果你的插件是ObfuscatePlugin,请提供不在任何配置范围内的baseObfuscateSettings

lazy val baseObfuscateSettings: Seq[Def.Setting[_]] = Seq(
  obfuscate := Obfuscate((sources in obfuscate).value),
  sources in obfuscate := sources.value
)

正如您在上面看到的那样,它访问了sources密钥,但没有指定哪个配置的来源。

inConfig

override lazy val projectSettings = inConfig(Compile)(baseObfuscateSettings)

inConfig将设置顺序传递到特定配置。如果您想同时支持CompileTest,则可以说:

override lazy val projectSettings =
  inConfig(Compile)(baseObfuscateSettings) ++
  inConfig(Test)(baseObfuscateSettings)