Tooling Intermédiaire

De Runtime.exec(String) aux arguments de ProcessBuilder

Lancez des processus avec une liste d'arguments explicite et la configuration de ProcessBuilder.

✕ Command string
Process process = Runtime.getRuntime()
        .exec("git show " + revision);
✓ ProcessBuilder
Process process = new ProcessBuilder(
        "git", "show", revision)
        .redirectErrorStream(true)
        .start();
Un problème avec ce code ? Dites-le nous.
🎯

Arguments exacts

Chaque argument du processus reste une valeur distincte, sans tokenisation de la chaîne de commande.

🎛

Configuration explicite

L'environnement, le répertoire, les redirections et la gestion des erreurs sont configurés ensemble.

🛡

Frontières plus sûres

Évite de construire une chaîne de commande de type shell à partir de valeurs dynamiques.

Ancienne Approche
Runtime.exec(String)
Approche Moderne
ProcessBuilder
Depuis JDK
5
Difficulté
Intermédiaire
De Runtime.exec(String) aux arguments de ProcessBuilder
Disponible

Largement disponible depuis JDK 5 (septembre 2004)

Runtime.exec(String) applique la tokenisation des chaînes de commande de Java, facile à mal comprendre lorsque les arguments contiennent des espaces ou des guillemets. ProcessBuilder accepte les arguments du programme comme des valeurs distinctes et expose explicitement le répertoire de travail, l'environnement, les redirections d'entrée/sortie et la politique du flux d'erreur. Il n'invoque pas de shell à moins que l'application n'en lance un délibérément.