Von Runtime.exec(String) zu ProcessBuilder-Argumenten
Prozesse mit einer expliziten Argumentliste und ProcessBuilder-Konfiguration starten.
Process process = Runtime.getRuntime()
.exec("git show " + revision);
Process process = new ProcessBuilder(
"git", "show", revision)
.redirectErrorStream(true)
.start();
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.
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.