Tooling Średniozaawansowany

Od Runtime.exec(String) do argumentów ProcessBuilder

Uruchamiaj procesy z jawną listą argumentów i konfiguracją ProcessBuilder.

✕ Command string
Process process = Runtime.getRuntime()
        .exec("git show " + revision);
✓ ProcessBuilder
Process process = new ProcessBuilder(
        "git", "show", revision)
        .redirectErrorStream(true)
        .start();
Widzisz problem z tym kodem? Daj nam znać.
🎯

Dokładne argumenty

Każdy argument procesu pozostaje odrębną wartością, bez tokenizacji łańcucha polecenia.

🎛

Jawna konfiguracja

Środowisko, katalog, przekierowania i obsługa błędów są konfigurowane razem.

🛡

Bezpieczniejsze granice

Unika budowania łańcucha polecenia w stylu powłoki z wartości dynamicznych.

Stare podejście
Runtime.exec(String)
Nowoczesne podejście
ProcessBuilder
Od JDK
5
Poziom trudności
Średniozaawansowany
Od Runtime.exec(String) do argumentów ProcessBuilder
Dostępne

Szeroko dostępne od JDK 5 (wrzesień 2004)

Runtime.exec(String) stosuje tokenizację łańcucha polecenia w Javie, którą łatwo źle zrozumieć, gdy argumenty zawierają spacje lub cudzysłowy. ProcessBuilder przyjmuje argumenty programu jako odrębne wartości i jawnie udostępnia katalog roboczy, środowisko, przekierowania wejścia/wyjścia oraz politykę strumienia błędów. Nie uruchamia powłoki, o ile aplikacja nie zrobi tego celowo.