2011-10-23 10 views
5

Normalmente, comenzaría Jetty construyendo una instancia de Servidor, configurando un conector, un controlador y LifeCycleListener, seguido de una llamada al start() en la instancia del Servidor. No tengo la menor idea de cómo hacer que esto suceda con la tarea jettyRun en Gradle. La documentación es confusa para mí, y todavía tengo que encontrar un ejemplo de cómo funciona esta tarea, que no sea página tras página de gradle jettyRun.Gradle jettyRun: ¿cómo funciona esto?

Esta tarea me resulta atractiva porque supuestamente regresa inmediatamente después de la ejecución. Esto es útil para ejecutar pruebas de Selenium después de que mi aplicación web se ejecute desde Jenkins. Traté de hacerlo a través de una tarea JavaExec, pero esto no funcionará ya que la tarea JavaExec no finaliza hasta que la JVM subyacente finaliza también.

+0

Si usted quiere saber sobre el funcionamiento interno, ¿por qué no estudiar el [código fuente] (https://github.com/gradle/gradle/tree/master/subprojects/jetty/src/main/java/org/gradle/api/plugins/embarcadero)? –

+0

Siempre puede verificarse a sí mismo - ['org.gradle.api.plugins.jetty.JettyRun'] (http://svn.codehaus.org/gradle/gradle-core/tags/REL-0.7/src/main/groovy /org/gradle/api/plugins/jetty/JettyRun.java) –

+0

Compruebe mi respuesta aquí, utilizando la tarea Ant Jetty http://stackoverflow.com/a/18021790/39334 – stolsvik

Respuesta

4

Parece que desea iniciar Jetty para las pruebas de integración en el contenedor. Además de tener un vistazo al código fuente de estos dos mensajes deben empezar:

La característica clave que busca, a partir del embarcadero en el fondo, es jettyRun.daemon = true.

+0

Ugh, parece que esto requiere que me meta con un montón de desordenado XML. Prefiero el lanzador corto basado en Java que uso actualmente. El plugin Jetty es solo conveniente para configuraciones súper simples, parece. –

2

Lo que estoy usando para la prueba de integración en build.gradle se ve a continuación. Creo que este código es simple e intuitivo.

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() 
    } 
} 
+0

Tengo problemas para usar este código, parece que JettyStop no funciona, ya que una vez completada la tarea, el embarcadero todavía está funcionando, ¿hay alguna idea de qué podría estar causando esto? – Darvex

+0

@Darvex Compruebe si el puerto 8091 ya está en uso. –

+0

Lo he probado con diferentes puertos, he tenido mala suerte o hay algo más. De cualquier manera, voy a echar un vistazo – Darvex

Cuestiones relacionadas