Scala 如何在sbt插件中生成源代码?
我正在尝试生成一些源,如中所述 当我在我的Scala 如何在sbt插件中生成源代码?,scala,sbt,Scala,Sbt,我正在尝试生成一些源,如中所述 当我在我的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
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
之后加载插件,该插件将在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
)
}