2012-03-14 11 views
8

Potrzebuję zdefiniować niestandardowe zadania, które obliczają nazwę głównej klasy, a następnie uruchamiają ją. Myślałam o coś takiegoUtwórz nowe zadanie, które uruchamia program

customTask { 
    mainClass = compute main class name based on env 
    runMain(mainClass, jvm-args, fork=true) 
} 

a następnie w SBT chciałbym być w stanie uruchomić

SBT> zamówienie zadanie

można to zrobić w SBT 11,2?.

+0

Czy żyjesz na 0.11? Jeśli możesz uaktualnić do wersji 0.13, zobacz odpowiedź wizualną. W wersji 0.11 krótka wersja jest taka, że ​​nie można ponownie użyć zadania 'runMain', zamiast tego należy spojrzeć na kod źródłowy sbt, zobaczyć, jakie wywołania wykonuje to zadanie, a następnie wykonać te same wywołania w ramach własnego zadania. –

Odpowiedz

0

Późne odpowiedź, ale można tworzyć nowe zadania SBT jak wspomniano w dokumentacji http://www.scala-sbt.org/release/docs/Detailed-Topics/Tasks#defining-a-new-task

można uruchomić dowolny kod scala jako kod zadań. Zadania mogą również przyjmować argumenty wejściowe.

Prawie potężny IMO.

+0

Połączona dokumentacja jest w porządku, ale należy zwrócić uwagę na pole kombi wersji na górze strony, ponieważ istnieją znaczne różnice między różnymi wersjami sbt. – Beryllium

+0

Problem tutaj polega jednak na ponownym wykorzystaniu funkcjonalności z istniejącego zadania wejściowego, takiego jak 'runMain'. Zobacz https://github.com/sbt/sbt/issues/407 –

2

dobrze można spróbować .. I działa dobrze dla mnie -

lazy val testngRun = inputKey[Unit]("custom run task for testng") 

testngRun := { 
    val one = (runMain in Compile).fullInput(" org.testng.TestNG -testclass com.pg.acceptance.testcase.PfsLoginServiceTest").evaluated 
} 
+1

Należy pamiętać, że metoda 'fullInput' nie została dodana do sbt do wersji 0.13. –

Powiązane problemy