如何在多个范围内进行 sbt 任务 运行
How to make an sbt task run on under multiple scopes
我编写了一个生成一些源代码和资源的 sbt 插件。它被硬编码为在编译范围内工作。
我怎样才能让它在测试范围内工作,这样我就可以在 运行ning 测试时使用插件,它会查找并输出到正确的文件夹?
例如,在代码的各个点中,我提到了与 src/main/resources
相关的 resourceManaged in Compile
,但是当 test
是 运行 时,我希望它是resourceManaged in Test
当与 src/test/resources
相关时。
如何抽象出作用域?
这是 Plugins Best Practices, specifically in the 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)
我编写了一个生成一些源代码和资源的 sbt 插件。它被硬编码为在编译范围内工作。
我怎样才能让它在测试范围内工作,这样我就可以在 运行ning 测试时使用插件,它会查找并输出到正确的文件夹?
例如,在代码的各个点中,我提到了与 src/main/resources
相关的 resourceManaged in Compile
,但是当 test
是 运行 时,我希望它是resourceManaged in Test
当与 src/test/resources
相关时。
如何抽象出作用域?
这是 Plugins Best Practices, specifically in the 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)