Como executar uma tarefa externa gradle (Exec) em segundo plano?

Estou usando gradle e gulp para criar e iniciar meu aplicativo da web JEE baseado no JDK6 +, e o contêiner da web é o Jetty.

Gulp é usado para processar recursos estáticos, como concat e minify arquivos javascript / css. Além disso, há umwatch tarefa no meu script gulp, é usado para observar alterações estáticas de arquivos e reconstruí-las automaticamente.

Então, para iniciar o aplicativo no Jetty, preciso fazer o seguinte:

Criar recurso estático usando gulp[gulp task: build].Assista a alterações de arquivos estáticos[gulp task: watch], eu não chamo essa tarefa gulp diretamente, é chamada por uma tarefa gradle viaExec classe[gradle task: watch].Construa meu código java e inicie o Jetty[gradle task: jettyRun].

Desde que eu adicionei a tarefa gradlewatch como uma dependência dejettyRun tarefa, então eu só preciso ligargradle jettyRun a partir da linha de comando, meu aplicativo será iniciado. Mas o resultado não é o mesmo que eu esperava.

A seguir, meus arquivos 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();
});

O resultado:

Pergunta, questão:

Agora, o processo é interrompido quando dispensa ogradle watch tarefa, não há alteração para executarjettyRun tarefa para gradle. Eu sei que esse travamento é causado pelo processo de inspeção iniciado pelo gulp, porque está observando alterações no arquivo. Mas espero que o gradle apenas inicie o processo de gulp watch e retorne imediatamente para executar a próximajettyRun tarefa!

Como fazer isso? Além disso, eu quero ver a saída da tarefa watch do stdout.

Eu sei que existe um ProcessBuilder em java, eu tentei, mas não funciona. Talvez eu tenha feito algo errado. :(

Baixar todos os arquivos

questionAnswers(1)

yourAnswerToTheQuestion