Как выполнить внешнее задание (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, я пробовал, но он не работает. Может быть, я сделал что-то не так. :(