/ / SBT stosuje Zadanie po kompilacji - scala, kompilacja, sbt, zadanie

SBT stosuje zadanie po kompilacji - scala, kompilacja, sbt, zadanie

Jestem w stanie automatycznie wykonać zadanie przed kompilacją za pomocą:

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

Jak mam zrobić to samo, ale po skompilować?

Wiem, że mogę:

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

aby wykonać dowolny kod Scali, ale muszę automatycznie wykonać zadanie docelowe po wystąpieniu zdarzenia kompilacji

Robi coś takiego:

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

działa, jeśli napiszę „foo” z wiersza polecenia sbt>; to znaczy 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ę rzeczy w niewłaściwy sposób, aby podłączyć się do wbudowanego zadania kompilacji?

Odpowiedzi:

13 dla odpowiedzi nr 1

Ogólnie rzecz biorąc, niektóre zadania zależą od zadania.

Gdyby compile jest używane w znaczeniu „kompiluj i konfiguruj Grunta”, a następnie utwórz plik prepareGrunt zadanie, które zależy od compile i myTask i uruchom to zamiast tego.

Gdyby myTask powinien uruchomić się, zanim klasy i zasoby projektu zostaną wykorzystane przez coś innego, a następnie uczynić go zależnym exportedProducts. Zadania takie jak run i test a zadania w projektach zależnych uzyskają wyeksportowane wpisy ścieżki klasy z tego zadania.

Niebezpieczeństwo związane z „uruchamianiem po kompilacji” jest takie myTask nie zostanie uruchomiony przed zadaniem, które faktycznie tego potrzebuje. Jest triggeredBy metoda włączona Initialize[Task[T]], ale łatwo go nadużywać i należy go używać tylko wtedy, gdy wiadomo, że dane wyjściowe zadania są używane dopiero po wykonaniu wszystkich zadań.