Sulla base della documentazione 0.11.0 di sbt disponibile ("Common Tasks" wiki page e altri) e dopo aver visto come viene eseguito in Scalaz SBT build e in Scalate SBT build non riesco a capire perché il mio semplice esempio non funziona:Impossibile generare il codice sorgente con SBT 0.11 da "Configurazione completa"
import sbt._
import Keys._
object MyBuild extends Build {
lazy val project = Project(
id = "root",
base = file("."),
settings = Defaults.defaultSettings ++ Seq(
(sourceGenerators in Compile) <+= (sourceManaged in Compile) map { dir =>
val file = dir/"bla.scala"
IO.write(file, """object Bla extends App { println("bla!") }""")
Seq(file)
}
)
)
}
Mettere che il progetto/build.scala di un progetto vuoto e l'esecuzione di "SBT compilazione" genera/compila nulla e "run SBT" lamenta che non riesce a trovare alcuna classe principale.
Ora, se inserisco l'impostazione nella "configurazione rapida" build.sbt come segue invece della configurazione completa come sopra, funziona.
(sourceGenerators in Compile) <+= (sourceManaged in Compile) map { dir =>
val file = dir/"bla.scala"
IO.write(file, """object Bla extends App { println("bla!") }""")
Seq(file)
}
Ovviamente, la necessità di creare un file build.sbt in un progetto -solo "configurazione completa" è tutt'altro che auspicabile, almeno per me.
Quindi, perché questa impostazione non funziona nella configurazione completa?
Ho copiato e incollato quanto sopra in project/Build.scala, eseguito 'sbt run' e stampato bla! come previsto. Forse controlla che il nome del file sia corretto e che la definizione venga caricata lanciando un println nell'oggetto o modificando un'impostazione e verificandone l'effetto. –
'project/build.scala' fallisce dove' project/Build.scala' ha successo? – earldouglas
questo ragazzo merita un enorme voto negativo per mantenere la risposta non accettata per un anno. lasciami essere il primo :) –