Wie führe ich eine externe Gradle-Aufgabe (Exec) im Hintergrund aus?
Ich verwende gradle und gulp, um meine JEE-Webanwendung zu erstellen und zu starten, die auf JDK6 + basiert, und der Webcontainer ist Jetty.
Gulp wird verwendet, um statische Ressourcen zu verarbeiten, z. B. concat und Javascript- / CSS-Dateien zu minimieren. Es gibt auch einwatch
Aufgabe in meinem Gulp-Skript, es wird verwendet, um statische Dateiänderungen zu beobachten und sie automatisch neu zu erstellen.
Also, um die Anwendung in Jetty zu starten, muss ich folgende Dinge tun:
Statische Ressource mit gulp @ erstell[gulp task: build]
.Watch statische Dateiänderungen[gulp task: watch]
, ich rufe diese gulp-aufgabe nicht direkt auf, sie wird von einer gradle-aufgabe über @ aufgeruf Exec class[gradle task: watch]
.Meinen Java-Code erstellen und Jetty @ start[gradle task: jettyRun]
. Seit ich die gradle Aufgabe hinzugefügt habewatch
als Abhängigkeit vonjettyRun
Aufgabe, so dass ich obwohl ich nur @ anrufen mugradle jettyRun
von der Kommandozeile wird meine Anwendung gestartet. Aber das Ergebnis ist nicht das gleiche wie ich erwartet hatte.
Folgend sind meine Skriptdateien:
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
Now, der Prozess hungs wenn das @ excutgradle watch
task, es gibt keine Änderung, die ausgeführt werden mussjettyRun
Aufgabe für Gradle. Ich weiß, dass dieses Hängen durch den Überwachungsprozess verursacht wird, der von gulp gestartet wird, weil er Dateiänderungen überwacht. Aber ich hoffe, dass gradle nur den gulp watch-Prozess startet und sofort zurückkehrt, um das nächste @ auszuführejettyRun
task!
Wie macht man das? Außerdem möchte ich die Ausgabe der Überwachungsaufgabe von stdout sehen.
Ich weiß, dass es einen ProcessBuilder in Java gibt, ich habe es versucht, aber es funktioniert nicht. Vielleicht habe ich etwas falsch gemacht. :