Tooling Fortgeschritten

Von Runtime.exec(String) zu ProcessBuilder-Argumenten

Prozesse mit einer expliziten Argumentliste und ProcessBuilder-Konfiguration starten.

✕ Command string
Process process = Runtime.getRuntime()
        .exec("git show " + revision);
✓ ProcessBuilder
Process process = new ProcessBuilder(
        "git", "show", revision)
        .redirectErrorStream(true)
        .start();
Problem mit diesem Code entdeckt? Sag uns Bescheid.
🎯

Exakte Argumente

Jedes Prozessargument bleibt ein eigenständiger Wert ohne Tokenisierung der Befehlszeichenkette.

🎛

Explizite Konfiguration

Umgebung, Verzeichnis, Umleitungen und Fehlerbehandlung werden gemeinsam konfiguriert.

🛡

Sicherere Grenzen

Vermeidet den Aufbau einer shell-ähnlichen Befehlszeichenkette aus dynamischen Werten.

Alter Ansatz
Runtime.exec(String)
Moderner Ansatz
ProcessBuilder
Seit JDK
5
Schwierigkeitsgrad
Fortgeschritten
Von Runtime.exec(String) zu ProcessBuilder-Argumenten
Verfügbar

Weitgehend verfügbar seit JDK 5 (September 2004)

Runtime.exec(String) wendet die Tokenisierung von Java-Befehlszeichenketten an, die leicht missverstanden wird, wenn Argumente Leerzeichen oder Anführungszeichen enthalten. ProcessBuilder nimmt Programmargumente als eigenständige Werte entgegen und macht Arbeitsverzeichnis, Umgebung, Ein-/Ausgabeumleitungen sowie die Behandlung des Fehlerstroms explizit. Eine Shell wird nur gestartet, wenn die Anwendung dies ausdrücklich möchte.