Tooling Intermedio

De Runtime.exec(String) a argumentos de ProcessBuilder

Lanza procesos con una lista de argumentos explícita y la configuración de ProcessBuilder.

✕ Command string
Process process = Runtime.getRuntime()
        .exec("git show " + revision);
✓ ProcessBuilder
Process process = new ProcessBuilder(
        "git", "show", revision)
        .redirectErrorStream(true)
        .start();
¿Ves un problema con este código? Cuéntanos.
🎯

Argumentos exactos

Cada argumento del proceso sigue siendo un valor distinto sin tokenización de la cadena de comando.

🎛

Configuración explícita

El entorno, el directorio, las redirecciones y el manejo de errores se configuran en conjunto.

🛡

Límites más seguros

Evita construir una cadena de comando similar a un shell a partir de valores dinámicos.

Enfoque Antiguo
Runtime.exec(String)
Enfoque Moderno
ProcessBuilder
Desde JDK
5
Dificultad
Intermedio
De Runtime.exec(String) a argumentos de ProcessBuilder
Disponible

Ampliamente disponible desde JDK 5 (septiembre de 2004)

Runtime.exec(String) aplica la tokenización de cadenas de comando de Java, que es fácil de malinterpretar cuando los argumentos contienen espacios o comillas. ProcessBuilder acepta los argumentos del programa como valores distintos y expone de forma explícita el directorio de trabajo, el entorno, las redirecciones de entrada/salida y la política del flujo de error. No invoca un shell salvo que la aplicación lo lance deliberadamente.