如何在SBT autoplugin中将生成器任务添加到resourceGenerators?

如何在SBT autoplugin中将生成器任务添加到resourceGenerators?,sbt,Sbt,我正在SBT中编写一个Autoplugin。该插件应将一些文件生成到resourceManaged中。对于下面的代码(正在进行的工作),当我运行编译时,我没有看到FOOO输出,但当我使用yamlGen直接调用任务时,我看到了输出,这使我认为出于某种原因,我的任务没有正确地添加为资源生成器。我检查了很多其他的发电机插件,他们基本上就是这样做的。这里有什么问题 import sbt._ import Keys._ object SamplePlugin extends AutoPlugin {

我正在SBT中编写一个
Autoplugin
。该插件应将一些文件生成到
resourceManaged
中。对于下面的代码(正在进行的工作),当我运行
编译
时,我没有看到
FOOO
输出,但当我使用
yamlGen
直接调用任务时,我看到了输出,这使我认为出于某种原因,我的任务没有正确地添加为资源生成器。我检查了很多其他的发电机插件,他们基本上就是这样做的。这里有什么问题

import sbt._
import Keys._

object SamplePlugin extends AutoPlugin {
  override def trigger = allRequirements

  val yamlSourceFolder = SettingKey[File](
    "yaml-source-folder",
    "description"
  )

  val yamlSources = SettingKey[Seq[File]](
    "yaml-sources",
    "description"
  )

  val outputFolder = SettingKey[File](
    "output-folder",
    "description"
  )

  val yamlGen = TaskKey[Seq[File]](
    "yaml-gen",
    "description"
  )

  def yamlSettings(conf: Configuration): Seq[Setting[_]] = inConfig(conf)(Seq(
    yamlSourceFolder <<= (sourceDirectory in Compile) { _ / "yamin" },
    yamlSources <<= yamlSourceFolder { srcDir => (srcDir ** "*.yaml").get },
    outputFolder <<= (resourceManaged in Compile) { _ / "yamout" },
    yamlGen <<= (streams, yamlSources, outputFolder).map {
      (out, sources, outputDir) =>
        println("FOOO")
        // implement me
        (outputDir ** "*.abc").get
    },
    resourceGenerators <+= yamlGen
  ))

  override def projectSettings = yamlSettings(Compile)
}
导入sbt_
导入密钥_
对象SamplePlugin扩展了AutoPlugin{
覆盖def触发器=所有要求
val yamlSourceFolder=设置键[文件](
“yaml源文件夹”,
“说明”
)
val yamlSources=SettingKey[Seq[File]](
“yaml来源”,
“说明”
)
val outputFolder=设置键[文件](
“输出文件夹”,
“说明”
)
val yamlGen=TaskKey[Seq[File]](
“亚姆根”,
“说明”
)
def yamlSettings(形态:配置):Seq[设置[]]=inConfig(形态)(Seq(

yamlSourceFolder在其他论坛上找到了马克·哈拉的答案

compile
不会触发资源生成,因为编译不需要它。它将在
package
run
或其他需要资源的任务中触发

然而,让我困惑的是,您需要在项目中直接添加yamlGen:

   val root = (project in file("."))
       .enablePlugins(SamplePlugin)
       .settings(
          resourceGenerators in Compile <+= yamlGen in Compile
       )
val root=(文件中的项目(“.”)
.enablePlugins(SamplePlugin)
.设置(
使用Joshua Suereth提供的resourceGenerators in Compile,我使其正常工作。缺少对
JvmPlugin
的依赖项,这显然是必需的,因此我在
resourceGenerators
中的生成器不会被覆盖。添加此项修复了它:

override def requires: Plugins = plugins.JvmPlugin