Tooling Intermedio

Da Runtime.exec(String) agli argomenti di ProcessBuilder

Avvia i processi con un elenco di argomenti esplicito e la configurazione di ProcessBuilder.

✕ Command string
Process process = Runtime.getRuntime()
        .exec("git show " + revision);
✓ ProcessBuilder
Process process = new ProcessBuilder(
        "git", "show", revision)
        .redirectErrorStream(true)
        .start();
Vedi un problema con questo codice? Faccelo sapere.
🎯

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.

Approccio Vecchio
Runtime.exec(String)
Approccio Moderno
ProcessBuilder
Dal JDK
5
Difficoltà
Intermedio
Da Runtime.exec(String) agli argomenti di ProcessBuilder
Disponibile

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.