2011-10-23 16 views
5

Normalmente, avviare Jetty creando un'istanza Server, impostando un connettore, un gestore e LifeCycleListener, seguito da una chiamata a start() nell'istanza Server. Non ho la più pallida idea di come farlo accadere con l'attività jettyRun in Gradle. La documentazione mi confonde e devo ancora trovare un esempio di come funziona questa attività, oltre alla pagina dopo l'altra di gradle jettyRun.Gradle jettyRun: come funziona questa cosa?

Questo compito mi attrae perché si presume che ritorni immediatamente dopo l'esecuzione. Questo è utile per eseguire test Selenium dopo che la mia webapp è in esecuzione da Jenkins. Ho provato a farlo tramite un'attività JavaExec, ma questo non funzionerà poiché l'attività JavaExec non termina finché non termina anche la JVM sottostante.

+0

Se volete sapere riguardo la struttura interna, perché non si studia il [codice sorgente] (https://github.com/gradle/gradle/tree/master/subprojects/jetty/src/main/java/org/Gradle/api/plugins/pontile)? –

+0

Puoi sempre controllare te stesso - ['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

Controlla la mia risposta qui, usando l'attività ant Jetty http://stackoverflow.com/a/18021790/39334 – stolsvik

risposta

4

Sembra che tu voglia avviare Jetty per i test di integrazione del contenitore. Oltre ad avere uno sguardo al codice sorgente di questi due posti dovrebbe iniziare:

La caratteristica fondamentale che stai cercando, partendo Jetty in background, è jettyRun.daemon = true.

+0

Ugh, sembra che questo richieda un pasticcio con un mucchio di XML disordinato. Io preferisco il breve launcher basato su Java che attualmente utilizzo. Il plugin Jetty è comodo solo per le configurazioni super-semplici che sembra. –

2

Quello che sto utilizzando per il test di integrazione in build.gradle è simile al seguente. Penso che questo codice sia semplice 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

Ho problemi ad usare questo codice, sembra che jettyStop non funzioni, come dopo che l'attività è stata completata, il jetty è ancora in esecuzione, qualche idea su cosa potrebbe causare questo? – Darvex

+0

@Darvex Controllare se la porta 8091 è già in uso. –

+0

L'ho provato con porte diverse, o sono stato sfortunato, o c'è qualcosa di più. Ad ogni modo, darò un'occhiata – Darvex