Na podstawie dostępnej dokumentacji sbt 0.11.0 ("Common Tasks" wiki page i innych) i po zobaczeniu, jak to się robi w Scalaz SBT build i Scalate SBT build, nie mogę zrozumieć, dlaczego moja prosta przykład nie działa:Nie można wygenerować kodu źródłowego z SBT 0.11 z "Pełna konfiguracja"
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)
}
)
)
}
Umieszczenie że w projekcie/build.scala pustego projektu i działa „SBT kompilacji” generuje/kompiluje nic i „run SBT”, skarży się, że nie można znaleźć żadnego główne klasy.
Teraz, jeśli ustawię ustawienie "szybka konfiguracja" build.sbt zamiast pełnej konfiguracji jak powyżej, to po prostu działa.
(sourceGenerators in Compile) <+= (sourceManaged in Compile) map { dir =>
val file = dir/"bla.scala"
IO.write(file, """object Bla extends App { println("bla!") }""")
Seq(file)
}
Oczywiście konieczności tworzenia pliku build.sbt w konfiguracji „pełna” -tylko projektu jest daleko od pożądane, przynajmniej dla mnie.
Dlaczego to ustawienie nie działa w pełnej konfiguracji?
Skopiowałem i wkleiłem powyższe do projektu/Build.scala, uruchomiłem program 'sbt run', i wydrukowano go! zgodnie z oczekiwaniami. Być może sprawdź, czy nazwa pliku jest prawidłowa i czy definicja jest ładowana przez wrzucenie println do obiektu lub przez zmianę ustawienia i weryfikacja, że zaczyna działać. –
Czy 'project/build.scala' zawiedzie, gdzie' projekt/Build.scala' się powiedzie? – earldouglas
Ten facet zasługuje na masowe głosowanie w dół, aby nie zaakceptować odpowiedzi przez rok. pozwól mi być pierwszym :) –