Gradle jettyRun: как эта штука работает?

Обычно я запускаю Jetty, создавая экземпляр сервера, устанавливая коннектор, обработчик и LifeCycleListener, после чего следует вызов start() экземпляра сервера. У меня нет ни малейшего представления, как это сделать с помощью задачи jettyRun в Gradle. Документация сбивает меня с толку, и мне еще предстоит найти пример того, как работает эта задача, кроме страницы за страницей gradle jettyRun.

Эта задача мне нравится тем, что она якобы возвращается сразу после выполнения. Это полезно для запуска тестов Selenium после запуска моего веб-приложения из Jenkins. Я попытался сделать это с помощью задачи JavaExec, но это не сработает, поскольку задача JavaExec не завершается до тех пор, пока не завершится базовая JVM.


person Ray Nicholus    schedule 23.10.2011    source источник
comment
Если вы хотите узнать о внутреннем устройстве, почему бы вам не изучить исходный код?   -  person Peter Niederwieser    schedule 23.10.2011
comment
Вы всегда можете проверить сами - org.gradle.api.plugins.jetty.JettyRun   -  person Jarek Przygódzki    schedule 17.12.2012
comment
Проверьте мой ответ здесь, используя задачу ant Jetty stackoverflow.com/a/18021790/39334   -  person stolsvik    schedule 02.08.2013


Ответы (2)


Похоже, вы хотите запустить Jetty для интеграционных тестов внутри контейнера. Помимо просмотра исходного кода, эти два сообщения должны помочь вам начать работу:

Ключевая функция, которую вы ищете, запускающая Jetty в фоновом режиме, это jettyRun.daemon = true.

person Benjamin Muschko    schedule 23.10.2011
comment
Тьфу, похоже, это требует, чтобы я возился с кучей запутанных XML. Я предпочитаю короткую программу запуска на основе Java, которую использую сейчас. Кажется, что плагин Jetty удобен только для очень простых настроек. - person Ray Nicholus; 24.10.2011

То, что я использую для интеграционного теста в build.gradle, выглядит следующим образом. Я думаю, что этот код прост и интуитивно понятен.

test {
    exclude '**/*IntegrationTest*'
}

task integrationTest(type: Test) {
    include '**/*IntegrationTest*'
    doFirst {
        jettyRun.httpPort = 8080    // Port for test
        jettyRun.daemon = true
        jettyRun.execute()
    }
    doLast {
        jettyStop.stopPort = 8091   // Port for stop signal
        jettyStop.stopKey = 'stopKey'
        jettyStop.execute()
    }
}
person Sanghyun Lee    schedule 20.06.2013
comment
У меня возникли проблемы с использованием этого кода, кажется, что jettyStop не работает, так как после завершения задачи причал все еще работает, есть идеи, что может быть причиной этого? - person Darvex; 22.07.2013
comment
Пробовал с разными портами, то ли мне не повезло, то ли еще что-то. В любом случае посмотрю - person Darvex; 23.07.2013