أطر CLI لجافا: إنشاء تطبيقات وحدة تحكم قوية
يتطلب تطوير تطبيقات وحدة التحكم المعقدة بلغة جافا ليس فقط المنطق، بل أيضًا واجهة سطر أوامر (CLI) سهلة الاستخدام. تحليل الوسائط، معالجة الخيارات، عرض المساعدة - التنفيذ اليدوي لهذه المهام شاق وعرضة للأخطاء. لحسن الحظ، توجد أطر CLI ناضجة تعمل على أتمتة هذه العملية. في هذه المقالة، سنقوم بتحليل ثلاث أدوات رائدة بالتفصيل: Picocli، JCommander و Spring Shell، مع أمثلة كود وتوصيات للاختيار.
1. Picocli - حديث وعالي الأداء
Picocli (https://picocli.info/) هو إطار CLI الأكثر شيوعًا لجافا في الوقت الحالي. ميزته الرئيسية هي واجهة برمجة التطبيقات (API) البسيطة المعتمدة على التعليقات التوضيحية، ودعم كل من Java و Kotlin و Groovy و Scala. لا تتطلب المكتبة تبعيات خارجية ويمكنها إنشاء الإكمال التلقائي لـ Bash و Zsh و Fish.
الميزات الرئيسية لـ Picocli:
- التعليقات التوضيحية
@Command،@Option،@Parameters - توليد المساعدة تلقائيًا (
--help) - الأوامر المتداخلة (الأوامر الفرعية)
- دعم أنواع القيم (int، boolean، enum، LocalDate)
- محولات ومحققين مخصصين
مثال لتطبيق بسيط باستخدام Picocli:
import picocli.CommandLine;import picocli.CommandLine.Command;import picocli.CommandLine.Option;import picocli.CommandLine.Parameters;
@Command(name = "greet", description = "يرحب بالمستخدم")public class GreetApp implements Runnable {
@Option(names = {"-n", "--name"}, defaultValue = "عالم", description = "اسم للترحيب") private String name;
@Option(names = {"-c", "--count"}, defaultValue = "1", description = "عدد التكرارات") private int count;
@Override public void run() { for (int i = 0; i < count; i++) { System.out.println("مرحبًا، " + name + "!"); } }
public static void main(String[] args) { int exitCode = new CommandLine(new GreetApp()).execute(args); System.exit(exitCode); }}التشغيل:
java GreetApp --name="مطور جافا" --count=3الإخراج:
مرحبًا، مطور جافا!مرحبًا، مطور جافا!مرحبًا، مطور جافا!2. JCommander - كلاسيكي مجرب
JCommander (https://jcommander.org/) هي مكتبة ناضجة ذات تاريخ غني (منذ عام 2011). تستخدم أيضًا التعليقات التوضيحية، ولكنها تقدم بنية أكثر مرونة للسيناريوهات المعقدة. JCommander مفيد بشكل خاص للمشاريع التي تتطلب تحكمًا صارمًا في التحليل ومعالجة الأخطاء.
الميزات الرئيسية لـ JCommander:
- التعليقات التوضيحية
@Parameterمع سماتnames،required،description - دعم الأوامر متعددة المستويات عبر
Commands - محقق معلمات مدمج
- إمكانية استخدام أنواع عشوائية من خلال المحولات
مثال باستخدام JCommander:
import com.beust.jcommander.JCommander;import com.beust.jcommander.Parameter;import com.beust.jcommander.Parameters;
@Parameters(commandDescription = "آلة حاسبة")public class Calculator {
@Parameter(names = {"--a"}, description = "الرقم الأول", required = true) private int a;
@Parameter(names = {"--b"}, description = "الرقم الثاني", required = true) private int b;
@Parameter(names = {"--op"}, description = "العملية: add, sub, mul, div") private String operation = "add";
public void run() { int result; switch (operation) { case "add": result = a + b; break; case "sub": result = a - b; break; case "mul