我正在通过以下方式启动一个过程。
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()
看起来很有希望,但显然我不明白它是如何工作的。我希望这里有人可以对此有所了解。