Как выполнить внешнее задание (Exec) в фоновом режиме?

Я использую gradle и gulp для создания и запуска своего веб-приложения JEE, основанного на JDK6 +, а веб-контейнер - Jetty.

Gulp используется для обработки статического ресурса, такого как concat и минимизировать файлы javascript / css. Также естьwatch Задача в моем скрипте gulp, она используется для отслеживания статических изменений файлов и их автоматической перестройки.

Итак, чтобы запустить приложение в Jetty, мне нужно сделать следующие вещи:

Создайте статический ресурс, используя gulp[gulp task: build].Смотреть статические изменения файлов[gulp task: watch]я не вызываю эту задачу gulp напрямую, она вызывается задачей gradle черезExec учебный класс[gradle task: watch].Создайте мой код Java и запустите Jetty[gradle task: jettyRun].

Так как я добавил задачу Gradlewatch как зависимостьjettyRun задача, так что я, хотя мне нужно только позвонитьgradle jettyRun из командной строки мое приложение будет запущено. Но результат не такой, как я ожидал.

Ниже приведены мои файлы сценариев:

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

Результат:

Вопрос:

Теперь, процесс зависает, когда оправдываетgradle watch задача, нет изменений для выполненияjettyRun задание для gradle. Я знаю, что это зависание вызвано процессом наблюдения, запущенным gulp, потому что он наблюдает за изменениями файлов. Но я надеюсь, что Gradle просто запустит процесс gulp watch и сразу же вернется к выполнению следующегоjettyRun задача!

Как это сделать? Кроме того, я хочу увидеть вывод задачи наблюдения из stdout.

Я знаю, что в Java есть ProcessBuilder, я пробовал, но он не работает. Может быть, я сделал что-то не так. :(

Скачать все файлы

Ответы на вопрос(1)

Ваш ответ на вопрос