من Runtime.exec(String) إلى وسائط ProcessBuilder
شغّل العمليات بقائمة وسائط صريحة وبإعدادات ProcessBuilder.
مقارنة الكود
✕ Command string
Process process = Runtime.getRuntime()
.exec("git show " + revision);
✓ ProcessBuilder
Process process = new ProcessBuilder(
"git", "show", revision)
.redirectErrorStream(true)
.start();
هل ترى مشكلة في هذا الكود؟ أخبرنا.
لماذا يتفوق الأسلوب الحديث
وسائط دقيقة
يبقى كل وسيط للعملية قيمة منفصلة دون تقسيم سلسلة الأمر إلى رموز.
إعداد صريح
تُضبط البيئة والدليل وإعادة التوجيه ومعالجة الأخطاء معاً.
حدود أكثر أماناً
يتجنّب بناء سلسلة أوامر شبيهة بالصدفة من قيم ديناميكية.
الأسلوب القديم
Runtime.exec(String)
الأسلوب الحديث
ProcessBuilder
منذ JDK
5
الصعوبة
متوسط
دعم JDK
من Runtime.exec(String) إلى وسائط ProcessBuilder
متاح
متاح على نطاق واسع منذ JDK 5 (سبتمبر 2004)
كيف يعمل
تطبّق Runtime.exec(String) تقسيم سلسلة الأمر إلى رموز وفق قواعد جافا، وهو أمر يسهل إساءة فهمه عندما تحتوي الوسائط على مسافات أو علامات اقتباس. تقبل ProcessBuilder وسائط البرنامج كقيم منفصلة، وتُظهر بوضوح دليل العمل والبيئة وإعادة توجيه الإدخال والإخراج وسياسة تدفق الأخطاء. ولا تستدعي صدفة إلا إذا شغّلها التطبيق عمداً.
توثيق ذو صلة
إثبات