如何从AutoPlugin中修改编译中的sourceGenerators ?



我正在使用新的AutoPlugin机制为sbt编写代码生成插件。我需要修改sourceGenerators in Compile设置,但不知何故,它不工作,当我做它从插件。调用compile后,屏幕上不打印任何内容。

然而,如果我采取sourceGenerators in Compile <+= (mySourceGenerator in Compile)行并将其移动到项目的build.sbt,突然sourceGenerators in Compile设置被修改,当我运行编译任务时,消息被写入屏幕。

我是不是漏掉了什么?插件的代码在这里:

package net.lopezbobeda.plugin
import sbt._
import Keys._
import java.io.{ File, Writer }
object MyPlugin extends AutoPlugin {
  // by defining autoImport, the settings are automatically imported into user's `*.sbt`
  object autoImport {
    // configuration points, like the built-in `version`, `libraryDependencies`, or `compile`
    lazy val mySourceGenerator = taskKey[Seq[File]]("Generate")
    // default values for the tasks and settings
    lazy val baseXtendPluginSettings: Seq[Def.Setting[_]] = Seq(
      mySourceGenerator in Compile := {
        val s: TaskStreams = streams.value
        s.log.info("Generating! "  + sourceManaged.value)
        Nil
      },
      sourceGenerators in Compile <+= (mySourceGenerator in Compile) // if I put this line in build.sbt everything works as expected.
      )
  }
  override def trigger = allRequirements
  import autoImport._
  override val projectSettings = baseXtendPluginSettings

}

问题是JVM插件重置了sourceGenerators设置。解决方法是添加:

override def requires = JvmPlugin

我在另一个问题中找到了答案:

如何在sbt插件中生成源?

最新更新