Da Runtime.exec(String) agli argomenti di ProcessBuilder
Avvia i processi con un elenco di argomenti esplicito e la configurazione di ProcessBuilder.
Process process = Runtime.getRuntime()
.exec("git show " + revision);
Process process = new ProcessBuilder(
"git", "show", revision)
.redirectErrorStream(true)
.start();
Argomenti esatti
Ogni argomento del processo resta un valore distinto, senza tokenizzazione della stringa di comando.
Configurazione esplicita
Ambiente, directory, redirezioni e gestione degli errori si configurano insieme.
Confini più sicuri
Evita di costruire una stringa di comando simile a una shell a partire da valori dinamici.
Ampiamente disponibile dal JDK 5 (settembre 2004)
Runtime.exec(String) applica la tokenizzazione delle stringhe di comando di Java, facile da fraintendere quando gli argomenti contengono spazi o virgolette. ProcessBuilder accetta gli argomenti del programma come valori distinti ed espone esplicitamente la directory di lavoro, l'ambiente, le redirezioni di input/output e la politica del flusso di errore. Non invoca una shell a meno che l'applicazione non ne avvii deliberatamente una.