Ich verwende Gradle und Schluck, um meine JEE-Webanwendung zu erstellen und zu starten, die auf JDK6 + basiert, und der Web-Container ist Jetty.Wie führe ich einen externen Task (Exec) im Hintergrund aus?
Gulp wird verwendet, um statische Ressourcen wie concat zu verarbeiten und javascript/css-Dateien zu minimieren. Außerdem gibt es eine watch
Aufgabe in meinem gulp Skript, es wird verwendet, um statische Dateiänderungen zu sehen und sie automatisch wieder aufzubauen.
So die Anwendung in Jetty zu starten, muss ich folgende Dinge tun: statische Ressource
- Bauen mit schluck
[gulp task: build]
. - Watch statischen Dateiänderungen
[gulp task: watch]
, ich nicht diese Schluck-Task direkt aufrufen, ist es durch eine Task-Großansicht über Exec Klasse[gradle task: watch]
. - Erstellen Sie meinen Java-Code und starten Sie Jetty
[gradle task: jettyRun]
.
Da ich hinzugefügt, um die gradle Aufgabe watch
als Abhängigkeit von jettyRun
Aufgabe, so dass ich ich brauche allerdings nur gradle jettyRun
von der Kommandozeile aufrufen, wird meine Anwendung gestartet werden. Aber das Ergebnis ist nicht dasselbe wie ich erwartet hatte.
Es folgt mein Skript-Dateien:
build.gradle
apply plugin: 'war'
apply plugin: 'jetty'
repositories {
jcenter()
}
// omit the dependencies here
task watch(type: Exec){
workingDir "${projectDir}"
// Pass build type to npm and gulp.
commandLine "gulp", "watch"
}
jettyRun.dependsOn watch
gulpfile.js
var gulp = require('gulp');
gulp.task('build', function(callback) {
// removed the code to make this question as simple as possible.
if (callback != null) callback();
});
gulp.task('watch', function(callback) {
gulp.watch(['./src/static/**/*.js'], ['build']);
if (callback != null) callback();
});
Das Ergebnis:
Frage:
Nun wird das Verfahren Hungs wenn Excutes die gradle watch
Aufgabe, gibt es keine Änderung jettyRun
Aufgabe für gradle auszuführen ist. Ich weiß, dass dieser Hang durch den von gulp gestarteten Überwachungsprozess verursacht wird, weil er Dateiänderungen beobachtet. Aber ich hoffe, dass Gradle nur den Schlucküberwachungsprozess startet und sofort zur Ausführung der nächsten jettyRun
Aufgabe zurückkehrt!
Wie geht das? Außerdem möchte ich die Ausgabe von Watch Task von stdout sehen.
Ich weiß, es gibt einen ProcessBuilder in Java, ich habe es versucht, aber es funktioniert nicht. Vielleicht habe ich etwas falsch gemacht. :(
Does [diese] (http://stackoverflow.com/questions/7864205/run-javaexec-task-in-background-and-then-terminate-when-build-completes) helfen? Oder [dieses Plugin] (https://github.com/marcoVermeulen/gradle-spawn-plugin)? – Allen
Ich denke nicht, dass Watch Task Teil des Builds sein sollte, es kann einmal aufgerufen werden und im Hintergrund laufen. Ich denke, es ist besser, die Überwachungsaufgabe zu trennen und sie in ein Startup-Skript zu schreiben. – Malloc