2011-10-05 5 views
26

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?

+0

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ć. –

+0

Czy 'project/build.scala' zawiedzie, gdzie' projekt/Build.scala' się powiedzie? – earldouglas

+0

Ten facet zasługuje na masowe głosowanie w dół, aby nie zaakceptować odpowiedzi przez rok. pozwól mi być pierwszym :) –

Odpowiedz

2

Po prostu skopiuj wklej swój kod do pliku project/Build.scala i uruchom go za pomocą sbt run i to działa.

Czy jesteś pewien, że twoje Build.scala jest poprawnie zlokalizowane (musi być w katalogu project)?