2014-07-13 48 views
14

Generating files'da açıklandığı gibi bazı kaynaklar oluşturmaya çalışıyorum.Bir sbt eklentisinde kaynaklar nasıl oluşturulur?

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 

Ama bir eklenti içinde aynı şeyi yapmak istediğinizde, görev asla çalışır:

benim build.sbt aşağıdaki koyduğunuzda, her şey çalışıyor başka

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 
) 
} 

her şey Eklentimi koydum, iyi çalışıyor gibi görünüyor, ancak kaynak dosya asla üretilmez.

Önemli bir noktayı kaçırıyor muyum?

cevap

21

Sen (sbt.Defaults.sourceConfigPaths bakınız) projectSettings içinde sourceGenerators sıfırlar JvmPlugin sonra eklenti yüklemek gerekir.

Bunu eklentiniz için bir gereksinim olarak ekleyerek yapabilirsiniz, ör. olarak görünmelidir

override def requires = JvmPlugin 

Eksiksiz örnek aşağıdaki gibidir:

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 
) 
}