我正在尝试生成一些来源,如
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 ) }