Tooling Orta

Runtime.exec(String) yerine ProcessBuilder argümanları

Süreçleri açık bir argüman listesi ve ProcessBuilder yapılandırmasıyla başlatın.

✕ Command string
Process process = Runtime.getRuntime()
        .exec("git show " + revision);
✓ ProcessBuilder
Process process = new ProcessBuilder(
        "git", "show", revision)
        .redirectErrorStream(true)
        .start();
Bu kodda bir sorun mu gördünüz? Bize bildirin.
🎯

Tam argümanlar

Her süreç argümanı, komut dizesi belirteçlemesi olmadan ayrı bir değer olarak kalır.

🎛

Açık yapılandırma

Ortam, dizin, yönlendirmeler ve hata işleme birlikte yapılandırılır.

🛡

Daha güvenli sınırlar

Dinamik değerlerden kabuk benzeri bir komut dizesi oluşturmaktan kaçınır.

Eski Yaklaşım
Runtime.exec(String)
Modern Yaklaşım
ProcessBuilder
JDK'dan itibaren
5
Zorluk
Orta
Runtime.exec(String) yerine ProcessBuilder argümanları
Mevcut

JDK 5'ten (Eylül 2004) itibaren geniş çapta kullanılabilir

Runtime.exec(String), argümanlar boşluk veya tırnak içerdiğinde kolayca yanlış anlaşılan Java komut dizesi belirteçlemesini uygular. ProcessBuilder program argümanlarını ayrı değerler olarak alır; çalışma dizinini, ortamı, giriş/çıkış yönlendirmelerini ve hata akışı politikasını açıkça sunar. Uygulama bilerek bir kabuk başlatmadıkça kabuk çağırmaz.