Как генерировать источники в 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
Но когда я пытаюсь сделать то же самое в плагине, задача никогда не запускается:
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
)
}
Все, что я добавил в свой плагин, кажется, работает нормально, но исходный файл никогда не генерируется.
Я пропустил что-то важное?
Ответы
Ответ 1
Вы должны загрузить свой плагин после 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
)
}