أطر CLI لجافا: Picocli وJCommander وSpring Shell

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

أطر CLI لجافا: بناء تطبيقات وحدة تحكم قوية



تطوير تطبيقات وحدة التحكم (CLI) بلغة جافا هي مهمة يواجهها كل مطور. المعالجة اليدوية لوسائط سطر الأوامر عبر main(String[] args) سرعان ما تصبح مرهقة وعرضة للأخطاء. لحسن الحظ، في نظام جافا البيئي، توجد أطر ناضجة تتولى التحليل والتحقق والإكمال التلقائي وتوليد المساعدة. في هذه المقالة، سنستعرض ثلاث أدوات رائدة: Picocli وJCommander وSpring Shell.



1. Picocli — حديث وعالي الأداء



Picocli هو إطار بحجم صغير (1.5 ميجابايت فقط) لا يتطلب تبعيات خارجية. يدعم التعليقات التوضيحية، والإكمال التلقائي لـ Bash/Zsh، وتوليد المساعدة المدمج. Picocli مثالي للخدمات المصغرة وأدوات سطر الأوامر.



الإمكانيات الرئيسية:

  • التعليقات التوضيحية @Command و@Option و@Parameters
  • الأوامر الفرعية المتداخلة (subcommands)
  • المعلمات المُنَمَّطة (int, boolean, enum, collections)
  • التحقق التلقائي (المعلمات الإلزامية، النطاقات)
  • الإخراج الملون وأشرطة التقدم
  • التجميع الأصلي لـ GraalVM


مثال كود:

import picocli.CommandLine;import picocli.CommandLine.Command;import picocli.CommandLine.Option;import picocli.CommandLine.Parameters;

@Command(name = "greet", description = "تحية المستخدم")public class GreetCommand implements Runnable {

@Option(names = {"-n", "--name"}, description = "اسم المستخدم", required = true) private String name;

@Option(names = {"-c", "--count"}, description = "عدد التكرارات", defaultValue = "1") private int count;

@Parameters(index = "0", description = "الرسالة", defaultValue = "مرحباً") private String message;

@Override public void run() { for (int i = 0; i < count; i++) { System.out.println(message + ", " + name + "!"); } }

public static void main(String[] args) { int exitCode = new CommandLine(new GreetCommand()).execute(args); System.exit(exitCode); }}


التشغيل: java GreetCommand -n عالم -c 2 "مرحباً" سيطبع:

مرحباً, عالم!مرحباً, عالم!


2. JCommander — مُجرَّب عبر الزمن



JCommander هو أحد أقدم أطر CLI (منذ 2010)، يُستخدم في مشاريع مثل Jenkins وTestNG. يدعم التعليقات التوضيحية والأنواع المعقدة والتدويل. يتميز JCommander ببساطة API ووثائق ممتازة.



الميزات الرئيسية:

  • التعليقات التوضيحية @Parameter مع الأسماء والأوصاف
  • دعم الأوامر المتداخلة عبر JCommander.addCommand()
  • التحقق عبر IParameterValidator المخصص
  • توليد المساعدة باستخدام usage()
  • العمل مع ملفات التكوين


مثال كود:

import com.beust.jcommander.JCommander;import com.beust.jcommander.Parameter;import com.beust.jcommander.Parameters;

@Parameters(commandDescription = "آلة حاسبة")public class CalculatorCommand {

@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() { double result; switch (operation) { case "add": result = a + b; break; case "sub": result = a - b; break; case "mul": result = a * b; break; case "div": result

توصيات