【问题标题】:How to make an sbt task run on under multiple scopes如何使 sbt 任务在多个范围内运行
【发布时间】:2015-09-04 09:00:29
【问题描述】:

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

我怎样才能让它也能在测试范围内工作,这样我就可以在运行测试时使用该插件,它会查找并输出到正确的文件夹?

例如,在代码的各个点中,我引用了与src/main/resources 相关的resourceManaged in Compile,但是当运行test 时,我希望它与src/test/resources 相关时是resourceManaged in Test

如何抽象出范围?

【问题讨论】:

    标签: scala sbt


    【解决方案1】:

    这是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 将传入的设置序列限定为特定配置。如果您想开箱即用地同时支持CompileTest,您可以说:

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

    【讨论】:

      猜你喜欢
      • 2015-12-17
      • 2017-06-24
      • 2012-08-04
      • 1970-01-01
      • 1970-01-01
      • 2014-08-08
      • 2012-04-04
      • 2017-11-26
      • 1970-01-01
      相关资源
      最近更新 更多