我正在尝试生成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
)
}
我在插件中放入的其他所有内容似乎都能正常工作,但源文件永远不会生成。
我错过了重要的事情吗?
答案 0 :(得分:21)
您必须在JvmPlugin
之后加载插件,这会在sourceGenerators
中重置projectSettings
(请参阅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
)
}