jsvc & Gradle - нет вывода на консоль, происходит сбой демона Gradle
Я пытаюсь протестировать свое Java-приложение с IntelliJ IDEA на моей локальной машине (оно предназначено для использования в качестве демона, поэтому используется jsvc).
В целях тестирования я хочу, чтобы и stdout, и stderr выводились на консоль. В соответствии с настройками jsvc help site ( jsvc --help) -outfile '&2'
а также -errfile '&1'
следует перенаправить stdout и stderr друг другу (согласно моему пониманию).
В обычной оболочке (с этими двумя заданными параметрами) демон запускает и выводит некоторые данные на консоль, но при использовании задачи Gradle Exec и точно такой же команды демон Gradle аварийно завершает работу и выводит файлы '&2' и '&1',
Конфигурация задачи:
File jsvcFile = file("./jsvc")
File pidFile = file("./jsvc.pid")
String mainClass = "substupdater.SubstUpdater"
task run (dependsOn: [jar, jsvc], type: Exec) {
doFirst {
// Get the absolute path of all libraries
String classPath = project.configurations.compile.join(':')
executable(jsvcFile)
args("-server", "-cp", classPath + ':' + jar.archivePath, "-nodetach",
"-cwd", project.rootDir, "-outfile", "'&2'", "-errfile", "'&1'",
"-pidfile", pidFile, "-procname", project.name, mainClass, "debug")
}
}
Сбой демона Gradle (запуск gradle -d):
21:57:52.911 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Changing state to: STARTING
21:57:52.914 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Waiting until process started: command '/path/to/jsvc'.
21:57:52.924 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Changing state to: STARTED
21:57:52.925 [INFO] [org.gradle.process.internal.DefaultExecHandle] Successfully started process 'command '/path/to/jsvc''
21:57:52.926 [DEBUG] [org.gradle.process.internal.ExecHandleRunner] waiting until streams are handled...
Daemon vm is shutting down... The daemon has exited normally or was terminated in response to a user interrupt.
21:57:53.528 [DEBUG] [org.gradle.launcher.daemon.registry.PersistentDaemonRegistry] Removing daemon address: [some-address port:35450, addresses:[/0:0:0:0:0:0:0:1%lo, /127.0.0.1]]
21:57:53.529 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Waiting to acquire exclusive lock on daemon addresses registry.
21:57:53.529 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Lock acquired on daemon addresses registry.
21:57:53.530 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on daemon addresses registry.
21:57:53.530 [DEBUG] [org.gradle.process.internal.ExecHandleRunner] Abort requested. Destroying process: command '/path/to/jsvc'.
21:57:53.532 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Changing state to: ABORTED
21:57:53.533 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Process 'command '/path/to/jsvc'' finished with exit value 1 (state: ABORTED)
----- End of the daemon log -----
21:57:53.888 [DEBUG] [org.gradle.launcher.daemon.client.DaemonClientInputForwarder] Dispatching close input message: org.gradle.launcher.daemon.protocol.CloseInput@ce9a99
21:57:53.888 [DEBUG] [org.gradle.launcher.daemon.client.DaemonClientConnection] thread 18: dispatching class org.gradle.launcher.daemon.protocol.CloseInput
21:57:53.889 [DEBUG] [org.gradle.launcher.daemon.client.DaemonClientConnection] thread 1: connection stop
21:57:53.907 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]
21:57:53.907 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] FAILURE: Build failed with an exception.
21:57:53.907 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]
21:57:53.908 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] * What went wrong:
21:57:53.908 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] Gradle build daemon disappeared unexpectedly (it may have been killed or may have crashed)
21:57:53.908 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]
21:57:53.908 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] * Try:
21:57:53.908 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] Run with --stacktrace option to get the stack trace.
Любая помощь будет оценена:)
1 ответ
Я просто должен был указать полный путь к символическим ссылкам дескриптора файла (а именно /proc/self/fd/1
за stdout
а также /proc/self/fd/2
за stderr
) и теперь вывод делается на консоль.
Демон Gradle все еще падает, но я думаю, что это связано с тем, что Gradle не может справиться с тем, что процесс демона jsvc убивает себя (?).