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

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

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

ابدأ الدورة

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

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



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

Picocli (يُنطق "باي-ك-لاي") هو إطار عمل خفيف مع تبعيات ضئيلة. يدعم التعليقات التوضيحية، والإكمال التلقائي في shell، والأوامر المتداخلة، وحتى إنشاء التعليمات بتنسيق صفحة man. يعتبر Picocli مثاليًا لإنشاء كل من الأدوات البسيطة وCLI المعقدة متعددة المستويات.



مثال على آلة حاسبة أساسية مع Picocli:

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

@Command(name = "calc", mixinStandardHelpOptions = true, version = "1.0", description = "آلة حاسبة بسيطة")public class Calculator implements Runnable {

@Parameters(index = "0", description = "الرقم الأول") private double a;

@Parameters(index = "1", description = "الرقم الثاني") private double b;

@Option(names = {"-o", "--operation"}, defaultValue = "+", description = "العملية: +, -, *, /") private String operation;

@Override public void run() { double result = switch (operation) { case "+" -> a + b; case "-" -> a - b; case "*" -> a * b; case "/" -> a / b; default -> throw new IllegalArgumentException("عملية غير معروفة: " + operation); }; System.out.printf("النتيجة: %.2f%n", result); }

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

التشغيل: java Calculator 10 5 -o "*" سيعرض النتيجة: 50.00. يقوم Picocli تلقائيًا بإنشاء تعليمات باستخدام --help والإصدار باستخدام --version.



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

JCommander هي واحدة من أقدم المكتبات لتحليل الوسائط في جافا. تستخدم التعليقات التوضيحية، ولكنها توفر تحكمًا يدويًا أكبر في التحليل. غالبًا ما يتم اختيار JCommander للمشاريع التي تتطلب مرونة وتكاملًا مع الكود الموجود.



مثال على محول عملات مع JCommander:

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

@Parameters(commandDescription = "محول العملات")public class CurrencyConverter {

@Parameter(names = {"--amount", "-a"}, description = "المبلغ", required = true) private Double amount;

@Parameter(names = {"--from", "-f"}, description = "من أي عملة (USD, EUR)", required = true) private String from;

@Parameter(names = {"--to", "-t"}, description = "إلى أي عملة", required = true) private String to;

@Parameter(names = {"--help", "-h"}, help = true, description = "إظهار التعليمات") private boolean help;

public void run() { if (help) { JCommander jc = new JCommander(this); jc.usage(); return; } // منطق تحويل مبسط double rate = switch (from.toUpperCase() + "_" + to.toUpperCase()) { case "USD_EUR" -> 0.92; case "EUR_USD" -> 1.09; default -> 1.0; }; System.out.printf("%.2f %s = %.2f %s%n", amount, from.toUpperCase(), amoun

توصيات