2013-06-11 23 views
14

jestem w stanie automatycznie wykonać zadanie przed kompilacją z:SBT zastosować zadanie po kompilacji

compile in Compile <<= (compile in Compile).dependsOn(myTask) 

Jak zrobić to samo, ale po skompilować?

wiem, że mogę zrobić:

compile in Compile <<= (compile in Compile) map{x=> 
    // post-compile work 
    doFoo() 
    x 
} 

na wykonanie dowolnego kodu Scala, ale muszę automatycznie się wykonać zadanie docelowe po wystąpieniu zdarzenia kompilacji

Uprawiając jak:

val foo = TaskKey[Unit]("foo", "...") 
val fooTask = foo <<= scalaInstance map {si => 
... 
} dependsOn(compile in Compile) 

działa po wpisaniu "foo" z polecenia sbt> prompt; tj. zadanie jest wykonywane po kompilacji, ale celem jest podpięcie się do samego zadania kompilacji, więc za każdym razem, gdy nastąpi kompilacja, zadanie foo jest automatycznie wywoływane po zakończeniu kompilacji.

Czy to możliwe, czy też robię coś w niewłaściwy sposób, aby podłączyć się do wbudowanego zadania kompilacji?

+0

Czy możesz wyjaśnić przypadek użycia? –

+0

@MarkHarrah, Play ma ograniczenia, w których przekierowania odwrotne javascript dla projektów podrzędnych mogą być generowane tylko w środowisku wykonawczym. Potrzebuję tras generowanych jako plik statyczny w czasie kompilacji, który udało mi się zrealizować, z wyjątkiem zahaczenia o zadanie jako operacji po kompilacji (tj. Muszę najpierw skompilować aplikację, inaczej nowe trasy nie będą rozliczane w zadaniu generowania tras). – virtualeyes

+0

Czy te pliki są generowane jako zasoby? –

Odpowiedz

13

Ogólnie rzecz biorąc, istnieje pewne zadanie, które zależy od zadania.

Jeśli compile jest używany w znaczeniu „kompilacji i ustawić rzeczy dla Grunt”, a następnie utworzyć prepareGrunt zadanie, które zależy od compile i myTask i metę że zamiast.

Jeśli klasa myTask powinna zostać uruchomiona, zanim klasy projektu i zasoby zostaną użyte przez coś innego, należy ustawić zależność od exportedProducts. Zadania takie jak run i test oraz zadania w projektach zależnych otrzymają wyeksportowane wpisy ścieżki klasy z tego zadania.

Niebezpieczeństwo w "uruchomieniu po kompilacji" jest takie, że myTask nie zostanie uruchomione przed zadaniem, które faktycznie tego potrzebuje. Istnieje metoda triggeredBy na Initialize[Task[T]], ale jest ona łatwo nadużywana i powinna być używana tylko wtedy, gdy wiadomo, że dane wyjściowe zadania będą używane tylko po wykonaniu wszystkich zadań.

+3

+1 dzięki, Mark, robisz niesamowitą pracę z SBT, trzymaj to (nie zapomnij jednak spać ;-)) – virtualeyes

Powiązane problemy