Ответ 1
Насколько я знаю, текущая версия Gradle (1.4) не имеет специальной поддержки DSL для запуска/закрытия внешних процессов. Вы можете реализовать его в groovy прямо внутри build script, это не должно быть слишком сложно.
Мне бы хотелось, чтобы моя задача gradle:
Это похоже на запуск сервера для запуска интеграционных тестов, но это не сервер типа tomcat/jetty, поэтому его нужно запускать из командной строки и ждать, пока сервер будет "готов" через серверный выпуск.
В настоящее время я могу использовать задачу exec для запуска моей задачи и получения вывода. Поэтому я думаю, что, возможно, я могу скопировать код Groovy/Java, чтобы добиться того, чего хочу.
Однако, кажется, утомительно кодировать эту, казалось бы, общую картину. Поэтому мне интересно, есть ли более простой способ решить такие проблемы без слишком большого количества кодирования - т.е. Это общий шаблон, который gradle имеет DSL для?
Обратите внимание, что я новичок в Gradle, поэтому любые советы по этой теме также будут оценены.
Насколько я знаю, текущая версия Gradle (1.4) не имеет специальной поддержки DSL для запуска/закрытия внешних процессов. Вы можете реализовать его в groovy прямо внутри build script, это не должно быть слишком сложно.
Общий шаблон: возможно, нет - слишком много разных возможностей/комбинаций для того, чтобы существовал какой-либо стандартный шаблон.
Но просто создать собственную логику с набором задач. Самой сложной частью является ожидание внешнего процесса, который Gradle имеет DSL для (Ant на самом деле имеет основную логику /DSL, Gradle просто обертывает его).
Это моя задача подождать, пока Postgres появится внутри локального контейнера докера:
task waitForLocalDb(){
group = 'docker.db'
mustRunAfter localApiSvcDbRunCleanContainer
doFirst{
println "waiting for Postgres to come up"
ant.waitfor(
maxwait:"10", maxwaitunit:"second",
checkevery:"500", checkeveryunit: "millisecond"
){
socket(server:"192.168.99.100", port:"5544")
}
}
}
Это ожидает Postgres, проверяя, что он прослушивает указанный порт.
Вы можете использовать задачу Ant waitfor, чтобы делать разные вещи - например, проверить, чтобы сервер сказал: "сервер готов" в файле где-нибудь ( "в stdout" будет очень сильно зависеть от того, как вы запускали свой процесс).
Или вы можете проверить, что "сервер готов" или что-то подобное в определенном URL-адресе, см. fooobar.com/info/484814/...