2012-03-14 17 views
8

Devo definire un'attività personalizzata che calcoli il nome di una classe principale e quindi la esegua. Stavo pensando a qualcosa di simileCreare una nuova attività che esegue un programma

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

e poi in SBT sarei in grado di eseguire

sbt> personalizzato-task

questo può essere fatto in SBT 11.2?.

+0

Sei bloccato in 0,11? Se è possibile eseguire l'aggiornamento a 0.13, vedere la risposta di Visual. Alla 0.11, la versione breve è che non è possibile riutilizzare l'attività 'runMain', invece, si guarda il codice sorgente di sbt, si vede che cosa chiama quell'attività, e poi si eseguono le stesse chiamate nella propria attività. –

risposta

0

risposta in ritardo, ma è possibile creare nuove attività SBT come indicato nella documentazione di http://www.scala-sbt.org/release/docs/Detailed-Topics/Tasks#defining-a-new-task

È possibile eseguire qualsiasi codice Scala come codice compito. Le attività possono anche prendere argomenti di input.

Abbastanza potente IMO.

+0

La documentazione collegata va bene, ma si dovrebbe fare attenzione alla casella combinata della versione in cima alla pagina, perché ci sono notevoli differenze tra le diverse versioni di sbt. – Beryllium

+0

Il problema qui però sta riutilizzando la funzionalità da un'attività di input esistente come 'runMain'. Vedere https://github.com/sbt/sbt/issues/407 –

2

bene si può fare un tentativo .. mi funziona bene per me -

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

Si noti che il metodo 'fullInput' non è stato aggiunto a sbt fino alla versione 0.13. –

Problemi correlati