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.
Kod Karşılaştırması
✕ 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.
Modern yöntem neden daha iyi
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
JDK Desteği
Runtime.exec(String) yerine ProcessBuilder argümanları
Mevcut
JDK 5'ten (Eylül 2004) itibaren geniş çapta kullanılabilir
Nasıl çalışır
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.
İlgili Belgeler
Kanıt