scala – 如何在sbt插件中生成源代码?

我正在尝试生成一些来源,如 Generating files所述.

当我将以下内容放在我的build.sbt中时,一切正常:

sourceGenerators in Compile += Def.task {
  val file = (sourceManaged in Compile).value / "demo" / "Test.scala"
  IO.write(file,"""object Test extends App { println("Hi") }""")
  Seq(file)
}.taskValue

但是当我尝试在插件中做同样的事情时,任务永远不会运行:

object MyPlugin extends Autoplugin {
  override lazy val projectSettings = Seq(
    sourceGenerators in Compile += Def.task {
      val file = (sourceManaged in Compile).value / "demo" / "Test.scala"
      IO.write(file,"""object Test extends App { println("Hi") }""")
      Seq(file)
    }.taskValue
  )
}

我放在我的插件中的其他东西似乎工作正常,但源文件不生成.

我错过了一些重要的事情吗?

解决方法

您必须在JvmPlugin之后加载插件,JvmPlugin会重置projectSettings中的sourceGenerators(请参阅sbt.Defaults.sourceConfigPaths).

您可以通过将其作为要求添加插件中,例如

override def requires = JvmPlugin

您的完整示例应如下所示:

import sbt._
import Keys._
import plugins._

object MyPlugin extends Autoplugin {
  override def requires = JvmPlugin
  override lazy val projectSettings = Seq(
    sourceGenerators in Compile += Def.task {
      val file = (sourceManaged in Compile).value / "demo" / "Test.scala"
      IO.write(file,"""object Test extends App { println("Hi") }""")
      Seq(file)
    }.taskValue
  )
}

相关文章

共收录Twitter的14款开源软件,第1页Twitter的Emoji表情 Tw...
Java和Scala中关于==的区别Java:==比较两个变量本身的值,即...
本篇内容主要讲解“Scala怎么使用”,感兴趣的朋友不妨来看看...
这篇文章主要介绍“Scala是一种什么语言”,在日常操作中,相...
这篇文章主要介绍“Scala Trait怎么使用”,在日常操作中,相...
这篇文章主要介绍“Scala类型检查与模式匹配怎么使用”,在日...