我编写了一个sbt插件,可以生成一些资源和资源。在编译范围内工作是硬编码的。
如何让它在测试范围内工作,所以我可以在运行测试时使用该插件,它会查看并输出到正确的文件夹?
例如,在代码的各个方面,我引用与resourceManaged in Compile
相关的src/main/resources
,但在运行test
时,我希望它为resourceManaged in Test
时与src/test/resources
有关。
如何抽象范围?
答案 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
密钥,但没有指定哪个配置的来源。
override lazy val projectSettings = inConfig(Compile)(baseObfuscateSettings)
inConfig
将设置顺序传递到特定配置。如果您想同时支持Compile
和Test
,则可以说:
override lazy val projectSettings =
inConfig(Compile)(baseObfuscateSettings) ++
inConfig(Test)(baseObfuscateSettings)