¿Cómo ejecutar una tarea externa de Gradle (Exec) en segundo plano?

Estoy usando gradle and gulp para compilar e iniciar mi aplicación web JEE que se basa en JDK6 +, y el contenedor web es Jetty.

Gulp se usa para procesar recursos estáticos, como concat y minify javascript / css. Además, hay unwatch tarea en mi secuencia de comandos gulp, se utiliza para ver los cambios de archivos estáticos y reconstruirlos automáticamente.

Entonces, para iniciar la aplicación en Jetty, necesito hacer lo siguiente:

Construir recursos estáticos usando gulp[gulp task: build].Ver cambios de archivos estáticos[gulp task: watch], no llamo a esta tarea Gulp directamente, es llamada por una tarea gradle a través deEjecutivo clase[gradle task: watch].Construir mi código java y lanzar Jetty[gradle task: jettyRun].

Desde que agregué la tarea gradlewatch como una dependencia dejettyRun tarea, así que aunque solo necesito llamargradle jettyRun desde la línea de comandos, mi aplicación se iniciará. Pero el resultado no es el mismo que esperaba.

Los siguientes son mis archivos de script:

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();
});

El resultado:

Pregunta:

Ahora, el proceso se cuelga cuando se ejecuta elgradle watch tarea, no hay cambio para ejecutarjettyRun tarea para gradle. Sé que este bloqueo es causado por el proceso de observación iniciado por gulp, porque está viendo los cambios de archivos. Pero espero que Gradle solo inicie el proceso de observación de tragos y regrese de inmediato para ejecutar el siguientejettyRun ¡tarea!

¿Como hacer esto? Además, quiero ver el resultado de la tarea de vigilancia desde stdout.

Sé que hay un ProcessBuilder en Java, lo he probado, pero no funciona. Tal vez he hecho algo mal. :(

Descargar todos los archivos

Respuestas a la pregunta(1)

Su respuesta a la pregunta