2

新しい AutoPlugin メカニズムを使用して、sbt 用のコード生成プラグインを作成しています。設定を変更する必要がありsourceGenerators in Compileますが、プラグインから行うとどういうわけか機能しません。compile を呼び出した後、画面には何も出力されません。

ただし、その行sourceGenerators in Compile <+= (mySourceGenerator in Compile)をプロジェクトの に移動すると、build.sbt突然sourceGenerators in Compile設定が変更され、コンパイル タスクを実行するとメッセージが画面に書き込まれます。

私がそこに欠けているものはありますか?プラグインのコードは次のとおりです。

package net.lopezbobeda.plugin

import sbt._
import Keys._
import java.io.{ File, Writer }

object MyPlugin extends AutoPlugin {
  // by defining autoImport, the settings are automatically imported into user's `*.sbt`
  object autoImport {
    // configuration points, like the built-in `version`, `libraryDependencies`, or `compile`
    lazy val mySourceGenerator = taskKey[Seq[File]]("Generate")

    // default values for the tasks and settings
    lazy val baseXtendPluginSettings: Seq[Def.Setting[_]] = Seq(
      mySourceGenerator in Compile := {
        val s: TaskStreams = streams.value
        s.log.info("Generating! "  + sourceManaged.value)
        Nil
      },
      sourceGenerators in Compile <+= (mySourceGenerator in Compile) // if I put this line in build.sbt everything works as expected.
      )

  }

  override def trigger = allRequirements

  import autoImport._

  override val projectSettings = baseXtendPluginSettings


}
4

1 に答える 1

5

問題は、JVM プラグインが sourceGenerators 設定をリセットすることでした。解決策は、追加するだけです:

override def requires = JvmPlugin

この他の質問で解決策を見つけました:

sbt プラグインでソースを生成するには?

于 2014-08-06T10:48:48.857 に答える