私は以下の方法でプロセスを起動します。JavaのサブプロセスのI/Oをリダイレクトする(なぜ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()
は有望に見えましたが、明らかに私はそれがどのように動作するのか分かりません。私はここに誰かがこれにいくつかの光を当てることを望んでいた。
はstart()
後にこのコードを追加し、あなたはそれがstdoutに印刷されています:
cmd.exeで、 'mvn --version> somefile.txt'を実行するとどうなりますか? – ARRG
@ARRG mavenのバージョン情報であるsomefile.txtというファイルを取得します。 – Rinke
1)[Runtime.exec()を実行しない場合](* http://www.javaworld.com)の推奨事項をすべて読み、実装します。 /jw-12-2000/jw-1229-traps.html)。それは問題を解決するかもしれない。そうでない場合は、失敗した理由に関する詳細情報を提供する必要があります。次に 'exec'を参照し、' ProcessBuilder'を使用して 'Process'をビルドする(引き続き)ことを無視します。 2) 'catch(Exception e){..'という形式のコードをcatch(Exception e){e.printStackTrace();}に変更します。 //非常に有益! .. .. –