Tooling Intermediário

De Runtime.exec(String) para argumentos de ProcessBuilder

Inicie processos com uma lista de argumentos explícita e a configuração do ProcessBuilder.

✕ Command string
Process process = Runtime.getRuntime()
        .exec("git show " + revision);
✓ ProcessBuilder
Process process = new ProcessBuilder(
        "git", "show", revision)
        .redirectErrorStream(true)
        .start();
Viu um problema com este código? Nos avise.
🎯

Argumentos exatos

Cada argumento do processo permanece um valor distinto, sem tokenização da string de comando.

🎛

Configuração explícita

Ambiente, diretório, redirecionamentos e tratamento de erros são configurados em conjunto.

🛡

Fronteiras mais seguras

Evita construir uma string de comando semelhante a um shell a partir de valores dinâmicos.

Abordagem Antiga
Runtime.exec(String)
Abordagem Moderna
ProcessBuilder
Desde o JDK
5
Dificuldade
Intermediário
De Runtime.exec(String) para argumentos de ProcessBuilder
Disponível

Amplamente disponível desde o JDK 5 (setembro de 2004)

Runtime.exec(String) aplica a tokenização de strings de comando do Java, que é fácil de interpretar errado quando os argumentos contêm espaços ou aspas. O ProcessBuilder aceita os argumentos do programa como valores distintos e expõe explicitamente o diretório de trabalho, o ambiente, os redirecionamentos de entrada/saída e a política do fluxo de erro. Ele não invoca um shell a menos que a aplicação o inicie deliberadamente.