2017-07-12 1 views
2

Während meiner Gradle Build muss ich einen einfachen Webserver ausführen, um einige statische Inhalte zu bedienen. Ich verwende Gradle's integrated classes dafür.Gradle HttpFileServer, läuft weiter, aber kill auf ctrl + c

Hier ist eine sehr einfache Version meiner build.gradle:

apply plugin: 'groovy' 

task server() { 
    doLast { 
    def root = new File(project.buildDir, '/site') 
    def port = 8765 
    def factory = new SimpleHttpFileServerFactory(); 
    def server = factory.start(root, port) 
    println "HTTP server started on $port" 
    } 
} 

ich die folgenden zwei Fragen, mit denen:

  • Wenn gradle server, gradle ausführt ausgeführt wird, startet den Server, und dann beendet (wobei der Daemon offensichtlich im Hintergrund bleibt und der Server läuft, was zu dem zweiten Problem führt)

  • Ich habe keine Möglichkeit, den Server über Gradle zu stoppen. Wenn ich gradle server erneut ausführen, erhalte ich eine Ausnahme, weil der Port verwendet wird.

Ich würde Phantasie eine der folgenden Lösungen:

  1. Wenn gradle server läuft, hält gradle läuft, bis ich ctrl getroffen + c, dann wird der Server als auch getötet

  2. Es gibt zwei Aufgaben: gradle startServer und gradle stopServer, die zum Starten und Stoppen von

    verwendet werden

Wie kann ich das erreichen oder gibt es eine andere, bessere Lösung?

Antwort

1

Ein kleiner Hack-ish, aber es funktioniert, wird der Server-Task hängen und die SIGKILL den Server zu

apply plugin: 'groovy' 

task server() { 
    doLast { 
    def root = new File(project.buildDir, '/site') 
    def port = 8765 
    def factory = new SimpleHttpFileServerFactory(); 
    def server = factory.start(root, port) 
    println "HTTP server started on $port" 
    while(true) Thread.sleep(1000) 
    } 
} 
+0

Einfach und effizient zu töten, danke! Ich habe festgestellt, dass es manchmal ein paar Sekunden dauert, bis der Server nach dem Drücken von Strg + C tatsächlich getötet wird, aber das ist kein Problem für meinen Fall. – qqilihq