2011-10-23 10 views
5

Thông thường, tôi sẽ khởi động Jetty bằng cách xây dựng một cá thể Máy chủ, thiết lập trình kết nối, trình xử lý và LifeCycleListener, sau đó gọi tới start() trên cá thể Máy chủ. Tôi đã không có ý tưởng foggiest làm thế nào để thực hiện điều này xảy ra với nhiệm vụ jettyRun trong Gradle. Tài liệu này gây nhầm lẫn cho tôi và tôi chưa tìm thấy ví dụ về tác vụ này hoạt động như thế nào, ngoài trang sau trang của gradle jettyRun.Gradle jettyRun: điều này hoạt động như thế nào?

Tác vụ này hấp dẫn tôi vì nó bị cáo buộc trả về ngay lập tức sau khi thực thi. Điều này rất hữu ích cho việc chạy thử nghiệm Selenium sau khi ứng dụng web của tôi chạy từ Jenkins. Tôi đã cố gắng làm điều này thông qua một nhiệm vụ JavaExec, nhưng điều này sẽ không hoạt động vì nhiệm vụ JavaExec không chấm dứt cho đến khi JVM cơ bản cũng kết thúc.

+0

Nếu bạn muốn biết về nội bộ, tại sao bạn không nghiên cứu [mã nguồn] (https://github.com/gradle/gradle/tree/master/subprojects/jetty/src/main/java/org/gradle/api/plugins/jetty)? –

+0

Bạn luôn có thể tự kiểm tra - ['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

Kiểm tra câu trả lời của tôi ở đây, sử dụng tác vụ ant Jetty http://stackoverflow.com/a/18021790/39334 – stolsvik

Trả lời

4

Có vẻ như bạn muốn bắt đầu Jetty cho các thử nghiệm tích hợp trong container. Bên cạnh đó có một cái nhìn tại các mã nguồn hai bài viết này sẽ giúp bạn bắt đầu:

Các tính năng quan trọng bạn đang tìm kiếm, bắt đầu Jetty ở chế độ nền, là jettyRun.daemon = true.

+0

Ugh, có vẻ như điều này yêu cầu tôi gây rối với một loạt các XML lộn xộn. Tôi thích trình chạy dựa trên java ngắn hơn mà tôi hiện đang sử dụng. Plugin Jetty chỉ thuận tiện cho các thiết lập siêu đơn giản. –

2

Những gì tôi đang sử dụng để kiểm tra tích hợp trong build.gradle trông giống như bên dưới. Tôi nghĩ mã này đơn giản và trực quan.

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

Tôi gặp sự cố khi sử dụng mã này, có vẻ như jettyStop không hoạt động, như sau khi công việc được hoàn thành, cầu cảng vẫn đang chạy, bất kỳ ý tưởng nào có thể gây ra điều này? – Darvex

+0

@Darvex Kiểm tra xem cổng 8091 đã được sử dụng chưa. –

+0

Tôi đã thử nó với các cổng khác nhau, hoặc tôi đã không may mắn, hoặc có một cái gì đó nhiều hơn cho nó. Dù bằng cách nào, tôi sẽ có một cái nhìn – Darvex