2011-10-23 68 views
5

通常,我將通過構建服務器實例,設置連接器,處理程序和LifeCycleListener,然後在服務器實例上調用start()來啓動Jetty。我不知道如何使Gradle中的jettyRun任務成爲現實。這些文檔讓我感到困惑,我還沒有找到這個任務如何工作的例子,除了一頁接一頁的頁面gradle jettyRunGradle jettyRun:這個東西是如何工作的?

此任務對我很有吸引力,因爲它涉嫌在執行後立即返回。這對於我的webapp從Jenkins運行後運行Selenium測試很有幫助。我試圖通過JavaExec任務來完成此任務,但這不起作用,因爲JavaExec任務不會終止,直到底層JVM終止。

+0

如果你想了解內部,你爲什麼不研究[源代碼](https://github.com/gradle/gradle/tree/master/subprojects/jetty/src/main/JAVA /組織/ gradle產出/ API /插件/碼頭)? –

+0

你可以隨時檢查自己 - ['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

在這裏檢查我的答案,使用ant jetty任務http://stackoverflow.com/a/18021790/39334 – stolsvik

回答

4

這聽起來像你想啓動Jetty進行容器內集成測試。除了具有看看源代碼,這兩個職位應該讓你開始:

您正在尋找的,在後臺開始碼頭的主要特點,是jettyRun.daemon = true

+0

呃,看起來像這需要我惹一個一堆亂七八糟的XML。我更喜歡我目前使用的簡短的基於java的啓動器。 Jetty插件僅用於超級簡單的設置。 –

2

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

我在使用這段代碼時遇到了麻煩,好像jettyStop不工作,因爲任務完成後,jetty仍在運行,任何想法可能會導致這種情況? – Darvex

+0

@Darvex檢查8091端口是否已被使用。 –

+0

我已經嘗試了不同的端口,要麼我不走運,要麼有更多的東西。無論哪種方式,我會看看 – Darvex

相關問題