Я запускаю процесс следующим образом.Перенаправление ввода-вывода подпроцесса в Java (почему не работает ProcessBuilder.inheritIO()?)
try {
final Process mvnProcess = new ProcessBuilder("cmd", "/c", "mvn", "--version")
.directory(new File(System.getProperty("user.dir")))
.inheritIO()
.start();
System.exit(mvnProcess.waitFor());
} catch (final IOException ex) {
System.err.format(IO_EXCEPTION);
System.exit(1);
} catch (final InterruptedException ex) {
System.err.format(INTERRUPTED_EXCEPTION);
System.exit(1);
}
Поскольку я призываю inheritIO()
я ожидал выход подпроцесса на консоли, но ничего не появляется. Что мне здесь не хватает?
Редактировать: Я знаю, что могу использовать mvnProcess.getInputStream()
и явно читать выход процесса, записывая его на консоль (или где-быв) в цикле. Однако мне не нравится это решение, поскольку цикл блокирует мой поток. inheritIO()
выглядел многообещающим, но, видимо, я не понимаю, как это работает. Я надеялся, что кто-то здесь может пролить свет на это.
Что произойдет, если в cmd.exe вы выполните 'mvn -version> somefile.txt'? – ARRG
@ARRG Я получаю файл с именем somefile.txt с информацией о версии maven – Rinke
1) Прочитайте (и реализуйте) * все * рекомендации [Когда Runtime.exec() не будет] (http://www.javaworld.com /jw-12-2000/jw-1229-traps.html). Это может решить проблему. Если нет, он должен предоставить дополнительную информацию о причине отказа. Затем проигнорируйте, что он ссылается на 'exec' и (продолжает) сборку' Process' с помощью 'ProcessBuilder'. 2) Изменить код формы 'catch (Исключение e) {..' to' catch (Исключение e) {e.printStackTrace(); // очень информативно! ..' –