Надеюсь, этот фрагмент даст вам некоторое представление о том, как это можно сделать.
Вы можете использовать замыкания слушателя сборки для запуска кода при начале / завершении сборки. Однако по какой-то причине закрытие gradle.buildStarted
не работает в milestone-3, поэтому я заменил его на gradle.taskGraph.whenReady
, что и помогает.
Затем вы можете вызвать задачу runJetty
с помощью Task#execute()
(обратите внимание, что этот API не является официальным и может исчезнуть), а также запустить его из ExecutorService
, чтобы получить некоторое асинхронное поведение.
import java.util.concurrent.*
task myTask << {
println "Do usual tasks here"
}
task runJetty << {
print "Pretend we are running Jetty ..."
while(!stopJetty){
Thread.sleep(100)
}
println "Jetty Stopped."
}
stopJetty = false
es = Executors.newSingleThreadExecutor()
jettyFuture = null
//gradle.buildStarted { ... }
gradle.taskGraph.whenReady { g ->
jettyFuture = es.submit({ runJetty.execute() } as Callable)
}
gradle.buildFinished {
println "Stopping Jetty ... "
stopJetty = true
//This is optional. Could be useful when debugging.
try{
jettyFuture?.get()
}catch(ExecutionException e){
println "Error during Jetty execution: "
e.printStackTrace()
}
}