Java के लिए CLI फ्रेमवर्क: शक्तिशाली कंसोल एप्लिकेशन बनाना
Java में कंसोल (CLI) एप्लिकेशन विकसित करना एक ऐसा कार्य है जिसका सामना हर डेवलपर करता है। main(String[] args) के माध्यम से कमांड लाइन आर्गुमेंट्स को मैन्युअल रूप से संभालना जल्दी ही बोझिल और त्रुटि-प्रवण हो जाता है। सौभाग्य से, Java इकोसिस्टम में परिपक्व फ्रेमवर्क मौजूद हैं जो पार्सिंग, वैलिडेशन, ऑटो-कम्प्लीशन और हेल्प जनरेशन का कार्य संभाल लेते हैं। इस लेख में, हम तीन प्रमुख टूल्स पर विचार करेंगे: Picocli, JCommander और Spring Shell।
1. Picocli — आधुनिक और उच्च प्रदर्शन वाला
Picocli एक न्यूनतम आकार (केवल 1.5 MB) वाला फ्रेमवर्क है जिसे किसी बाहरी निर्भरता की आवश्यकता नहीं है। यह एनोटेशन, Bash/Zsh के लिए ऑटो-कम्प्लीशन और बिल्ट-इन हेल्प जनरेशन का समर्थन करता है। Picocli माइक्रोसर्विसेज और कमांड लाइन टूल्स के लिए आदर्श है।
मुख्य विशेषताएं:
- एनोटेशन
@Command,@Option,@Parameters - नेस्टेड सबकमांड (subcommands)
- टाइप किए गए पैरामीटर (int, boolean, enum, कलेक्शन)
- स्वचालित वैलिडेशन (अनिवार्य पैरामीटर, रेंज)
- रंगीन आउटपुट और प्रोग्रेस-बार
- 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