Sto avviando un processo nel modo seguente.Reindirizzamento I/O del sottoprocesso in Java (perché ProcessBuilder.inheritIO() non funziona?)
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);
}
Dal invoco inheritIO()
mi aspettavo di uscita del sotto-processo sulla console, ma non appare nulla. Cosa mi manca qui?
Edit: So che posso usare mvnProcess.getInputStream()
e leggere l'output del processo in modo esplicito, la scrittura alla console (o dove-mai) in un ciclo. Non mi piace questa soluzione, tuttavia, poiché il ciclo bloccherà il mio thread. inheritIO()
sembrava promettente, ma a quanto pare non capisco come funziona. Speravo che qualcuno qui potesse far luce su questo.
Cosa succede se, nel cmd.exe, si esegue 'mvn --version> somefile.txt'? – ARRG
@ARRG Ricevo un file chiamato somefile.txt con le informazioni sulla versione di maven – Rinke
1) Leggi (e implementa) * tutte * le raccomandazioni di [Quando Runtime.exec() non lo farà] (http://www.javaworld.com /jw-12-2000/jw-1229-traps.html). Questo potrebbe risolvere il problema. In caso contrario, dovrebbe fornire maggiori informazioni sul motivo per cui ha fallito. Quindi ignora che si riferisce a 'exec' e (continua a) costruire il' Processo' usando un 'ProcessBuilder'. 2) Cambia il codice del form 'catch (Exception e) {..' in' catch (Exception e) {e.printStackTrace(); // molto informativo! ..' –