Apache Commons CLI হল একটি Java লাইব্রেরি যা কমান্ড-লাইন আর্গুমেন্ট প্রসেসিং (Command Line Parsing) সহজ এবং কার্যকরীভাবে করতে সহায়তা করে। এটি অ্যাপ্লিকেশনে কমান্ড-লাইন আর্গুমেন্ট গ্রহণ এবং সেই আর্গুমেন্টের ভিত্তিতে বিভিন্ন কার্যক্রম সম্পাদন করতে সাহায্য করে। এই লাইব্রেরি ব্যবহার করে আপনি ফ্ল্যাগ, অপশন এবং আর্গুমেন্ট এর মাধ্যমে কমান্ড-লাইন ইনপুটকে পার্স করতে পারেন।
নিচে Apache Commons CLI ব্যবহার করে কমান্ড-লাইন আর্গুমেন্ট পার্স করার একটি সাধারণ উদাহরণ দেওয়া হয়েছে।
1. Apache Commons CLI সেটআপ
প্রথমে আপনার প্রকল্পে Apache Commons CLI লাইব্রেরি যুক্ত করতে হবে। যদি আপনি Maven ব্যবহার করেন, তাহলে আপনার pom.xml ফাইলে এই ডিপেনডেন্সি যোগ করুন:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-cli</artifactId>
<version>1.4</version>
</dependency>
এটি লাইব্রেরির ১.৪ ভার্সন। এরপর আপনি CommandLineParsing করতে পারবেন।
2. Command Line Parsing এর সাধারণ পদ্ধতি
এখানে একটি উদাহরণ দেওয়া হয়েছে যা দেখায় কীভাবে Apache Commons CLI ব্যবহার করে কমান্ড-লাইন আর্গুমেন্ট পার্স করা হয়।
উদাহরণ: Command Line Parsing
import org.apache.commons.cli.*;
public class CommandLineParsingExample {
public static void main(String[] args) {
// Command Line Options তৈরি করা
Options options = new Options();
// "username" অপশন যোগ করা
Option usernameOption = new Option("u", "username", true, "Username for login");
usernameOption.setRequired(true); // এই অপশনটি অবশ্যই প্রদান করতে হবে
options.addOption(usernameOption);
// "password" অপশন যোগ করা
Option passwordOption = new Option("p", "password", true, "Password for login");
passwordOption.setRequired(true); // এই অপশনটি অবশ্যই প্রদান করতে হবে
options.addOption(passwordOption);
// "verbose" অপশন (একটি ফ্ল্যাগ অপশন)
Option verboseOption = new Option("v", "verbose", false, "Enable verbose output");
options.addOption(verboseOption);
// CommandLineParser তৈরি করা
CommandLineParser parser = new DefaultParser();
HelpFormatter formatter = new HelpFormatter();
try {
// আর্গুমেন্ট পার্স করা
CommandLine cmd = parser.parse(options, args);
// "username" এবং "password" আর্গুমেন্ট রিড করা
String username = cmd.getOptionValue("username");
String password = cmd.getOptionValue("password");
// "verbose" আর্গুমেন্ট চেক করা
boolean verbose = cmd.hasOption("verbose");
// আউটপুট
System.out.println("Username: " + username);
System.out.println("Password: " + password);
System.out.println("Verbose mode: " + (verbose ? "Enabled" : "Disabled"));
} catch (ParseException e) {
// যদি কোনো সমস্যা ঘটে, সাহায্য দেখান
System.out.println("Parsing failed. Reason: " + e.getMessage());
formatter.printHelp("CommandLineParsingExample", options);
}
}
}
ব্যাখ্যা:
- Options অবজেক্ট তৈরি:
Optionsঅবজেক্ট তৈরি করা হয়েছে যাতে CLI অপশনগুলো সংরক্ষণ করা যায়। - Option তৈরি: এখানে তিনটি অপশন তৈরি করা হয়েছে:
-uবা--username: ব্যবহারকারীর নামের জন্য।-pবা--password: পাসওয়ার্ডের জন্য।-vবা--verbose: একটি ফ্ল্যাগ অপশন, যা নির্ধারণ করবে যে ভার্বোস আউটপুট সক্ষম হবে কিনা।
- CommandLineParser:
DefaultParserব্যবহার করে আর্গুমেন্টগুলো পার্স করা হচ্ছে। - আর্গুমেন্ট হ্যান্ডলিং:
cmd.getOptionValue()এবংcmd.hasOption()ব্যবহার করে নির্দিষ্ট অপশনগুলির মান এবং তাদের উপস্থিতি যাচাই করা হচ্ছে। - এবং সাহায্য বার্তা: যদি কমান্ড লাইন আর্গুমেন্টগুলি ভুলভাবে দেওয়া হয়, তাহলে
HelpFormatterআপনাকে সাহায্য বার্তা দেখাবে।
3. কমান্ড লাইন আর্গুমেন্টের পার্সিং এবং আউটপুট
এখন যদি আপনি এই প্রোগ্রামটি চালান, তাহলে এটি কমান্ড-লাইন আর্গুমেন্ট অনুসারে আউটপুট প্রদান করবে। উদাহরণস্বরূপ:
java CommandLineParsingExample -u john_doe -p secretpassword -v
আউটপুট হবে:
Username: john_doe
Password: secretpassword
Verbose mode: Enabled
অথবা, যদি আপনি -v অপশন বাদ দেন:
java CommandLineParsingExample -u john_doe -p secretpassword
তাহলে আউটপুট হবে:
Username: john_doe
Password: secretpassword
Verbose mode: Disabled
এছাড়া, যদি আপনি ভুলভাবে অপশন প্রদান করেন, যেমন:
java CommandLineParsingExample -u
তাহলে HelpFormatter আপনাকে সাহায্য বার্তা দেখাবে:
Parsing failed. Reason: Missing argument for option: u
usage: CommandLineParsingExample
-u,--username <arg> Username for login
-p,--password <arg> Password for login
-v,--verbose Enable verbose output
4. সুবিধা এবং কাস্টমাইজেশন
Apache Commons CLI এর মাধ্যমে CLI আর্গুমেন্ট পার্সিং অনেক সহজ এবং সহজে কাস্টমাইজযোগ্য। আপনি সহজেই নতুন অপশন এবং ফ্ল্যাগ যোগ করতে পারেন, এছাড়া কাস্টম মেসেজ, হেল্প ফরম্যাটিং, এবং উন্নত ভ্যালিডেশন ফিচার ব্যবহার করে আপনার CLI টুলকে আরও কার্যকরী করতে পারেন।
উল্লেখযোগ্য সুবিধাগুলি:
- কাস্টম মেসেজ: কাস্টমাইজড হেল্প মেসেজ তৈরি করা যেতে পারে।
- বিভিন্ন আর্গুমেন্ট ফরম্যাট: যেমন ফ্ল্যাগ, ভ্যালু অপশন, অথবা ম্যান্ডেটরি আর্গুমেন্টের জন্য কাস্টম লজিক।
- এবং এবং অথবা অপশন: একাধিক অপশনের জন্য শর্তাবলী এবং লজিক নির্ধারণ করা।
- ফ্ল্যাগ অপশন: ফ্ল্যাগ অপশন, যেমন
-vবা--verboseসংযুক্ত করা যায় যা বিশেষ কোনো ভ্যালু গ্রহণ না করে শুধু উপস্থিতি দিয়ে কাজ করে।
Apache Commons CLI লাইব্রেরি ব্যবহার করে কমান্ড-লাইন আর্গুমেন্ট খুব সহজে পার্স করা যায় এবং এতে বিভিন্ন ধরণের CLI অপশন যোগ করা যেতে পারে। এর মাধ্যমে আপনি আপনার অ্যাপ্লিকেশনে শক্তিশালী CLI সমাধান যোগ করতে পারেন এবং ব্যবহারকারীদের জন্য প্রাথমিক নির্দেশিকা এবং সাহায্য বার্তা প্রদান করতে পারেন। এটি কমান্ড-লাইন ইনপুট গ্রহণ এবং সেই ইনপুটের ভিত্তিতে বিভিন্ন কার্যক্রম পরিচালনা করার জন্য একটি খুব কার্যকরী টুল।
Command Line Parsing কি?
Command Line Parsing হল এমন একটি প্রক্রিয়া, যার মাধ্যমে কমান্ড লাইন থেকে আসা আর্গুমেন্ট বা ইনপুট ডেটা পার্স (ভাঙা) করা হয় এবং সেগুলিকে প্রোগ্রামের মধ্যে ব্যবহারযোগ্য ফর্মে রূপান্তর করা হয়। এটি বিশেষত কমান্ড-লাইন অ্যাপ্লিকেশন এবং ইউটিলিটিগুলির জন্য গুরুত্বপূর্ণ, যেখানে ব্যবহারকারী কন্ট্রোল আর্গুমেন্ট (যেমন ফাইল পাথ, ফ্ল্যাগ, বা ডেটা) প্রোগ্রামে প্রদান করে।
Apache Commons CLI লাইব্রেরি কমান্ড লাইন আর্গুমেন্ট পার্স করার জন্য একটি শক্তিশালী ও সহজ ব্যবহারযোগ্য টুল। এটি আপনাকে কমান্ড-লাইন ইনপুট থেকে আর্গুমেন্ট বা অপশন বের করার প্রক্রিয়া সহজ করে তোলে এবং সেই অনুযায়ী প্রোগ্রামের কার্যক্রম পরিচালনা করতে সহায়তা করে।
Command Line Parsing এর ভূমিকা
- আর্গুমেন্ট হ্যান্ডলিং সহজ করা
অ্যাপ্লিকেশনগুলির জন্য কমান্ড লাইন আর্গুমেন্ট পার্সিং অপরিহার্য। অ্যাপাচি কমন্স সিআলআই (Apache Commons CLI) লাইব্রেরি এই কাজটি সহজ করে তোলে। এটি আর্গুমেন্টের স্ট্রিংগুলিকে পৃথক করে এবং নির্দিষ্ট অপশনগুলিতে রূপান্তর করে। উদাহরণস্বরূপ, যদি আপনি একটি কমান্ড রান করেনjava MyApp -f filename.txt -v, তাহলে এই আর্গুমেন্টগুলো আলাদা করে ফ্ল্যাগ (যেমন-f) এবং এর মান (যেমনfilename.txt) নিতে সাহায্য করে। - কমান্ড ইনপুটের ত্রুটি ধরতে সহায়তা
যখন ব্যবহারকারী ভুল আর্গুমেন্ট প্রদান করে (যেমন একটি অপরিচিত ফ্ল্যাগ ব্যবহার করা), তখন Apache Commons CLI আর্গুমেন্টগুলির মধ্যে ত্রুটি শনাক্ত করে এবং সঠিক ব্যবহার দেখানোর জন্য সহায়তা প্রদান করে। - কমান্ড লাইন অপশন সঠিকভাবে পরিচালনা
কমান্ড লাইন আর্গুমেন্টগুলির মধ্যে সংক্ষিপ্ত অপশন (যেমন-f) এবং পূর্ণ অপশন (যেমন--file) থাকতে পারে। Apache Commons CLI এসব অপশন হ্যান্ডলিংয়ের জন্য সহজ এবং কার্যকর পদ্ধতি প্রদান করে। এটি আর্গুমেন্টের উপস্থিতি পরীক্ষা করে, তাদের মান সংগ্রহ করে এবং প্রয়োজনীয় বৈশিষ্ট্য বা ফ্ল্যাগগুলি সক্রিয় করে। - স্বয়ংক্রিয় হেল্প মেসেজ প্রদান
কমান্ড লাইন আর্গুমেন্টের ভুল ব্যবহারের ক্ষেত্রে, Apache Commons CLI স্বয়ংক্রিয়ভাবে হেল্প মেসেজ প্রদর্শন করে, যাতে ব্যবহারকারী সঠিকভাবে অপশনগুলো ব্যবহার করতে পারে।
Apache Commons CLI দিয়ে Command Line Parsing এর ব্যবহার
Apache Commons CLI লাইব্রেরি ব্যবহার করে আপনি খুব সহজেই কমান্ড লাইন আর্গুমেন্ট পার্স করতে পারেন। এটি অপশন এবং আর্গুমেন্ট চেকিং, মান যাচাই করা এবং হেল্প মেসেজ প্রদানে সহায়তা করে।
উদাহরণ: Apache Commons CLI দিয়ে Command Line Parsing
import org.apache.commons.cli.*;
public class CommandLineParsingExample {
public static void main(String[] args) {
// অপশন তৈরি
Options options = new Options();
// সংক্ষিপ্ত এবং পূর্ণ অপশন সংজ্ঞায়িত করা
options.addOption("f", "file", true, "File to process");
options.addOption("v", "verbose", false, "Enable verbose output");
options.addOption("h", "help", false, "Show help");
CommandLineParser parser = new DefaultParser();
HelpFormatter formatter = new HelpFormatter();
try {
// আর্গুমেন্ট পার্স করা
CommandLine cmd = parser.parse(options, args);
// -f বা --file অপশন চেক করা
if (cmd.hasOption("f")) {
String filePath = cmd.getOptionValue("f");
System.out.println("File to process: " + filePath);
}
// -v বা --verbose অপশন চেক করা
if (cmd.hasOption("v")) {
System.out.println("Verbose output enabled");
}
// -h বা --help অপশন চেক করা
if (cmd.hasOption("h")) {
formatter.printHelp("CommandLineParsingExample", options);
}
} catch (ParseException e) {
System.out.println("Parsing failed. Reason: " + e.getMessage());
formatter.printHelp("CommandLineParsingExample", options);
}
}
}
এখানে Options অবজেক্টে বিভিন্ন অপশন (যেমন -f, -v, -h) তৈরি করা হয়েছে। এরপর, CommandLineParser ব্যবহার করে ইনপুট আর্গুমেন্টগুলো পার্স করা হয়েছে। যদি ইউজার -f বা --file অপশন ব্যবহার করেন, তাহলে প্রোগ্রাম সেই ফাইল পাথ নেয়, এবং যদি -v বা --verbose অপশন ব্যবহার করা হয়, তাহলে প্রোগ্রাম verbose আউটপুট প্রদর্শন করবে।
কমান্ড চালানোর উদাহরণ:
java CommandLineParsingExample -f input.txt -v
এটি আউটপুট করবে:
File to process: input.txt
Verbose output enabled
এবং যদি আপনি -h বা --help অপশন ব্যবহার করেন:
java CommandLineParsingExample -h
এটি আউটপুট করবে:
CommandLineParsingExample [options]
Options:
-f, --file <arg> File to process
-v, --verbose Enable verbose output
-h, --help Show help
Command Line Parsing এর সুবিধা
- সরলতা: Apache Commons CLI লাইব্রেরি ব্যবহার করে কমান্ড লাইন আর্গুমেন্ট পার্সিং খুবই সহজ এবং দ্রুত হতে পারে। এটি আপনার প্রোগ্রামে আর্গুমেন্ট হ্যান্ডলিংয়ের প্রক্রিয়াটি স্বয়ংক্রিয়ভাবে সম্পাদন করে।
- কাস্টম অপশন এবং মান: Apache Commons CLI আপনাকে কাস্টম অপশন এবং আর্গুমেন্ট হ্যান্ডলিংয়ের জন্য অনেক উপায় প্রদান করে, যেমন টাইপ যাচাই, ডিফল্ট মান নির্ধারণ, এবং আর্গুমেন্টের উপস্থিতি পরীক্ষা।
- ভুল আর্গুমেন্টের জন্য হেল্প বার্তা: ভুল ইনপুট দিলে, Apache Commons CLI স্বয়ংক্রিয়ভাবে হেল্প বার্তা দেখাবে, যাতে ব্যবহারকারী সঠিকভাবে অপশনগুলো ব্যবহার করতে পারে।
সারাংশ
Command Line Parsing হল একটি অত্যন্ত গুরুত্বপূর্ণ প্রক্রিয়া যখন কমান্ড লাইন ইনপুট গ্রহণ করতে হয়। Apache Commons CLI লাইব্রেরি ব্যবহার করে আপনি এই প্রক্রিয়াকে অনেক সহজ এবং কার্যকরীভাবে পরিচালনা করতে পারেন। এটি আপনাকে কমান্ড লাইন অপশন তৈরি, আর্গুমেন্ট চেক, মান যাচাই এবং হেল্প বার্তা প্রদানে সাহায্য করে। CLI আর্গুমেন্টের প্রক্রিয়াকরণ আপনার অ্যাপ্লিকেশনকে আরও শক্তিশালী এবং ব্যবহারকারী-বান্ধব করে তোলে।
Apache Commons CLI লাইব্রেরি কমান্ড লাইন আর্গুমেন্ট প্রোসেসিং সহজ করে তোলে। CommandLineParser ইন্টারফেসটি কমান্ড লাইন আর্গুমেন্টগুলোকে একটি নির্দিষ্ট কাঠামোতে পার্স করতে ব্যবহৃত হয়। এটি আপনাকে কমান্ড লাইন আর্গুমেন্টের মধ্যে বিভিন্ন options এবং arguments সঠিকভাবে প্রক্রিয়া করতে সাহায্য করে।
এখানে, আমরা CommandLineParser ইন্টারফেসের মাধ্যমে কমান্ড লাইন আর্গুমেন্ট পার্স করার পদ্ধতি দেখব।
CommandLineParser Interface কী?
CommandLineParser ইন্টারফেসটি Apache Commons CLI লাইব্রেরির একটি অংশ, যা আর্গুমেন্ট পার্সিংয়ের জন্য ব্যবহৃত হয়। এটি কমান্ড লাইন আর্গুমেন্টগুলিকে Options অবজেক্টে রূপান্তর করে, যাতে আমরা সহজে সেগুলিকে অ্যাক্সেস এবং ব্যবহার করতে পারি।
এই ইন্টারফেসের দুটি গুরুত্বপূর্ণ ইমপ্লিমেন্টেশন হল:
- DefaultParser: এটি একটি সাধারণ পার্সার যা সবচেয়ে বেশি ব্যবহৃত হয়।
- GnuParser: এটি GNU-style অপশন (যেমন,
--option=value) সমর্থন করে।
CommandLineParser Interface এর মাধ্যমে Argument Parsing
এই অংশে আমরা DefaultParser ব্যবহার করে একটি কমান্ড লাইন অ্যাপ্লিকেশনে আর্গুমেন্ট পার্স করব।
ধাপ 1: Apache Commons CLI লাইব্রেরি অন্তর্ভুক্ত করা
প্রথমে, Maven ব্যবহার করে আপনার প্রোজেক্টে Apache Commons CLI লাইব্রেরি অন্তর্ভুক্ত করতে হবে। আপনার pom.xml ফাইলে নিচের ডিপেনডেন্সি যোগ করুন:
<dependencies>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-cli</artifactId>
<version>1.4</version>
</dependency>
</dependencies>
ধাপ 2: CommandLineParser Interface ব্যবহার করে Argument Parsing উদাহরণ
import org.apache.commons.cli.*;
public class CommandLineParserExample {
public static void main(String[] args) {
// Option তৈরি করা
Options options = new Options();
// 'input' অপশন তৈরি করা
Option input = new Option("i", "input", true, "Input file");
input.setRequired(true); // এটি একটি Required অপশন
options.addOption(input);
// 'output' অপশন তৈরি করা
Option output = new Option("o", "output", true, "Output file");
output.setRequired(false); // এটি একটি Optional অপশন
options.addOption(output);
// CommandLineParser তৈরি করা (DefaultParser)
CommandLineParser parser = new DefaultParser();
CommandLine cmd = null;
try {
// আর্গুমেন্ট পার্স করা
cmd = parser.parse(options, args);
// 'input' অপশন চেক করা
if (cmd.hasOption("input")) {
System.out.println("Input file: " + cmd.getOptionValue("input"));
}
// 'output' অপশন চেক করা
if (cmd.hasOption("output")) {
System.out.println("Output file: " + cmd.getOptionValue("output"));
}
} catch (ParseException e) {
// যদি কোনো ভুল আর্গুমেন্ট দেওয়া হয়, তাহলে HelpFormatter ব্যবহার করা
HelpFormatter formatter = new HelpFormatter();
formatter.printHelp("CommandLineParserExample", options);
}
}
}
ব্যাখ্যা:
- Options: এখানে আমরা দুটি অপশন তৈরি করেছি:
input(যা অবশ্যই দিতে হবে) এবংoutput(যা Optional)। - CommandLineParser: DefaultParser ইমপ্লিমেন্টেশন ব্যবহার করে আর্গুমেন্টগুলো পার্স করা হচ্ছে।
- CommandLine: এটি আর্গুমেন্টগুলো ধারণ করবে এবং
getOptionValue()মেথডের মাধ্যমে আমরা তাদের মান বের করব। - HelpFormatter: যদি ব্যবহারকারী ভুল আর্গুমেন্ট দেয়, তাহলে এই ক্লাসের মাধ্যমে সাহায্য দেখানো হবে।
ধাপ 3: কমান্ড লাইন আর্গুমেন্টের সাথে রান করা
ধরা যাক, এই প্রোগ্রামটি CommandLineParserExample নামে সংরক্ষিত রয়েছে। আপনি যদি কমান্ড লাইন থেকে এটি রান করেন:
java CommandLineParserExample -i input.txt -o output.txt
আউটপুট:
Input file: input.txt
Output file: output.txt
যদি আপনি -i অপশনটি বাদ দেন, তাহলে HelpFormatter সাহায্য প্রদর্শন করবে:
java CommandLineParserExample -o output.txt
আউটপুট:
Usage: CommandLineParserExample
-i,--input <arg> Input file
-o,--output <arg> Output file
CommandLineParser এর অন্যান্য ইমপ্লিমেন্টেশন
GnuParser: যদি আপনি GNU-style অপশন পছন্দ করেন, যেমন --input=input.txt, তাহলে আপনি GnuParser ব্যবহার করতে পারেন।
CommandLineParser parser = new GnuParser();
এটি --option=value স্টাইলে আর্গুমেন্ট গ্রহণ করবে।
সারাংশ
CommandLineParser ইন্টারফেস ব্যবহার করে কমান্ড লাইন আর্গুমেন্ট পার্স করা একটি সহজ এবং কার্যকরী প্রক্রিয়া। আপনি DefaultParser ব্যবহার করে সাধারণ আর্গুমেন্ট পার্সিং করতে পারেন এবং GnuParser ব্যবহার করে GNU-style অপশন সমর্থন করতে পারেন। Options এবং CommandLine অবজেক্টের মাধ্যমে আপনি আর্গুমেন্টগুলির মান সংগ্রহ এবং যাচাই করতে পারবেন।
Apache Commons CLI লাইব্রেরি কমান্ড লাইন আর্গুমেন্ট পার্সিংয়ের জন্য দুটি প্রধান পার্সার সরবরাহ করে: DefaultParser এবং GnuParser। দুটি পার্সারের মধ্যে পার্থক্য রয়েছে এবং তারা বিভিন্ন ধরনের কমান্ড লাইন আর্গুমেন্ট স্টাইল পরিচালনা করে। DefaultParser সাধারণ কমান্ড লাইন আর্গুমেন্ট এবং অপশন পার্স করতে ব্যবহৃত হয়, যেখানে GnuParser GNU স্টাইলের অপশন পার্স করার জন্য ব্যবহৃত হয়।
এখানে DefaultParser এবং GnuParser এর ব্যবহার এবং তাদের মধ্যে পার্থক্য ব্যাখ্যা করা হয়েছে।
1. DefaultParser
DefaultParser কমান্ড লাইন আর্গুমেন্ট পার্স করার জন্য একটি সাধারণ পার্সার। এটি সাধারণত কমান্ড লাইন আর্গুমেন্টগুলি যেগুলি - বা -- দিয়ে শুরু হয় সেগুলিকে পার্স করে। এটি কমপ্যাক্ট এবং সরল আর্গুমেন্ট স্টাইলগুলির জন্য ব্যবহৃত হয়, যেমন:
-n John--name John
DefaultParser একটি সহজ, ডিফল্ট স্টাইলের পার্সিংয়ের জন্য ব্যবহৃত হয়।
উদাহরণ: DefaultParser ব্যবহার
import org.apache.commons.cli.*;
public class CommandLineExample {
public static void main(String[] args) {
// Option অবজেক্ট তৈরি করা
Options options = new Options();
// --name এবং --age অপশন তৈরি করা
options.addOption("n", "name", true, "Your name");
options.addOption("a", "age", true, "Your age");
// DefaultParser দিয়ে আর্গুমেন্ট পার্স করা
CommandLineParser parser = new DefaultParser();
CommandLine cmd = null;
try {
// কমান্ড লাইন আর্গুমেন্ট পার্স করা
cmd = parser.parse(options, args);
// নাম অপশন চেক করা
if (cmd.hasOption("n")) {
String name = cmd.getOptionValue("n");
System.out.println("Name: " + name);
}
// বয়স অপশন চেক করা
if (cmd.hasOption("a")) {
String age = cmd.getOptionValue("a");
System.out.println("Age: " + age);
}
} catch (ParseException e) {
System.out.println("Parsing failed. Reason: " + e.getMessage());
}
}
}
আউটপুট:
যদি আপনি এই কোডটি java CommandLineExample -n John -a 25 চালান, তাহলে আউটপুট হবে:
Name: John
Age: 25
এখানে, DefaultParser স্টাইলের মধ্যে -n এবং --name অপশন কাজ করছে এবং এটি সঠিকভাবে আর্গুমেন্টগুলি পার্স করছে।
2. GnuParser
GnuParser একটি বিশেষ ধরনের পার্সার যা GNU স্টাইলের কমান্ড লাইন আর্গুমেন্ট পার্স করতে ব্যবহৃত হয়। এই স্টাইলের মধ্যে অপশনগুলি সাধারণত - অথবা -- দিয়ে শুরু হয়, এবং আর্গুমেন্টগুলি মুল অপশনের পরে স্পেস দিয়ে দেওয়া হয়। যেমন:
-n John--name=John
এছাড়াও, GNU স্টাইলের মধ্যে একটি অপশন আর্গুমেন্ট বাদ দিয়েও কাজ করতে পারে, যেমন -n John এর পরিবর্তে -n এবং পরে আর্গুমেন্ট দিতে হবে না।
উদাহরণ: GnuParser ব্যবহার
import org.apache.commons.cli.*;
public class CommandLineExample {
public static void main(String[] args) {
// Option অবজেক্ট তৈরি করা
Options options = new Options();
// --name এবং --age অপশন তৈরি করা
options.addOption("n", "name", true, "Your name");
options.addOption("a", "age", true, "Your age");
// GnuParser দিয়ে আর্গুমেন্ট পার্স করা
CommandLineParser parser = new GnuParser();
CommandLine cmd = null;
try {
// কমান্ড লাইন আর্গুমেন্ট পার্স করা
cmd = parser.parse(options, args);
// নাম অপশন চেক করা
if (cmd.hasOption("n")) {
String name = cmd.getOptionValue("n");
System.out.println("Name: " + name);
}
// বয়স অপশন চেক করা
if (cmd.hasOption("a")) {
String age = cmd.getOptionValue("a");
System.out.println("Age: " + age);
}
} catch (ParseException e) {
System.out.println("Parsing failed. Reason: " + e.getMessage());
}
}
}
আউটপুট:
যদি আপনি এই কোডটি java CommandLineExample --name=John --age=25 চালান, তাহলে আউটপুট হবে:
Name: John
Age: 25
এখানে GnuParser ব্যবহার করে অপশন এবং আর্গুমেন্টগুলি --name=John এবং --age=25 ফরম্যাটে পার্স করা হয়েছে।
3. DefaultParser এবং GnuParser এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | DefaultParser | GnuParser |
|---|---|---|
| অপশন স্টাইল | -n John বা --name John | -n=John বা --name=John |
| আর্গুমেন্টের অবস্থান | অপশন এবং আর্গুমেন্ট একে অপরের পরে থাকতে হবে | অপশন এবং আর্গুমেন্ট একত্রে একই স্থানে থাকতে পারে |
| যথাযথ আর্গুমেন্ট প্রসেসিং | কমান্ড লাইন স্টাইলের জন্য সহজ পার্সিং | GNU স্টাইলের আর্গুমেন্ট, যেমন --option=value |
| কাস্টমাইজেশন | সাধারন ব্যবহারের জন্য উপযুক্ত | GNU ফর্ম্যাটের জন্য উপযুক্ত |
সারাংশ
DefaultParser এবং GnuParser হল দুটি প্রধান পার্সার যা Apache Commons CLI লাইব্রেরি দ্বারা প্রদান করা হয়। DefaultParser সাধারণ কমান্ড লাইন আর্গুমেন্ট পার্সিংয়ের জন্য ব্যবহৃত হয়, যেখানে আর্গুমেন্ট এবং অপশন একে অপরের পরে থাকে। অন্যদিকে, GnuParser GNU স্টাইলের অপশন এবং আর্গুমেন্ট হ্যান্ডল করতে ব্যবহৃত হয়, যা অপশন এবং আর্গুমেন্টের মধ্যে সমান চিহ্ন (=) ব্যবহার করে। আপনার প্রয়োজনে উপযুক্ত পার্সার নির্বাচন করে সহজে কমান্ড লাইন আর্গুমেন্ট প্রসেস করা সম্ভব।
Apache Commons CLI লাইব্রেরি ব্যবহার করার সময় Command Line Parsing প্রক্রিয়ায় বিভিন্ন ধরনের Errors এবং Exceptions ঘটতে পারে। এগুলি সাধারণত Invalid Arguments, Missing Options, Unrecognized Options বা Incorrect Value Types হতে পারে। এই সমস্যাগুলোর সমাধান করতে Apache Commons CLI তে কিছু ইনবিল্ট ফিচার রয়েছে, যেমন ParseException এবং HelpFormatter এর মাধ্যমে ভুল ইনপুট হ্যান্ডেল করা এবং ব্যবহারকারীকে সঠিক নির্দেশনা প্রদান করা।
এখানে Command Line Parsing Errors এবং Exception Handling নিয়ে আলোচনা করা হবে।
1. Apache Commons CLI - Command Line Parsing Errors
Command Line Parsing এর সময় যে সাধারণ এররগুলো হতে পারে, সেগুলো হলো:
- Invalid Option: একটি অজানা অপশন দেওয়া হলে।
- Missing Argument: কোনো অপশনের জন্য আর্গুমেন্ট প্রয়োজন হলেও তা দেওয়া হয়নি।
- Unrecognized Option: ক্লাসে উল্লেখিত অপশনের বাইরে অন্য কোনো অপশন দেওয়া হলে।
- Invalid Argument Type: অপশনের জন্য যে আর্গুমেন্ট টাইপ প্রত্যাশিত, তা না দেওয়া হলে।
এই ধরনের ত্রুটি ParseException দ্বারা ধরা পড়ে, যেটি CommandLineParser ক্লাস থেকে আসে।
2. Exception Handling এবং Errors Handling
কমান্ড লাইন পার্সিং এরর হ্যান্ডলিং
ParseException সাধারণত কমান্ড লাইন আর্গুমেন্ট পার্স করার সময় ঘটে। যদি কোনো অপশন ভুলভাবে ইনপুট দেওয়া হয়, তাহলে এটি একটি এক্সসেপশন থ্রো করবে। এই এক্সসেপশনটি হ্যান্ডল করতে try-catch block ব্যবহার করা হয় এবং ত্রুটি মেসেজ প্রদর্শনের জন্য HelpFormatter ব্যবহার করা যেতে পারে।
এখানে একটি উদাহরণ দেওয়া হলো:
import org.apache.commons.cli.*;
public class CommandLineParserExample {
public static void main(String[] args) {
// Create options object
Options options = new Options();
// Add short and long options
options.addOption("h", "help", false, "Show help");
options.addOption("f", "file", true, "Input file");
options.addOption("v", "verbose", false, "Verbose output");
// Create parser
CommandLineParser parser = new DefaultParser();
CommandLine cmd = null;
try {
// Parse the command line arguments
cmd = parser.parse(options, args);
// If help option is provided
if (cmd.hasOption("h")) {
HelpFormatter formatter = new HelpFormatter();
formatter.printHelp("CommandLineParserExample", options);
return;
}
// Process the file option
if (cmd.hasOption("f")) {
System.out.println("File: " + cmd.getOptionValue("f"));
}
// Verbose mode
if (cmd.hasOption("v")) {
System.out.println("Verbose mode enabled");
}
} catch (ParseException e) {
// Handle parsing errors
System.err.println("Error parsing command line arguments: " + e.getMessage());
// Print help if the error is related to incorrect input
HelpFormatter formatter = new HelpFormatter();
formatter.printHelp("CommandLineParserExample", options);
}
}
}
ব্যাখ্যা:
- Options অবজেক্টে Short এবং Long Options যুক্ত করা হয়েছে।
- CommandLineParser ক্লাস ব্যবহার করে আর্গুমেন্ট পার্স করা হচ্ছে।
- যদি পার্সিংয়ের সময় কোনো ত্রুটি ঘটে (যেমন, অজানা অপশন অথবা অপশন মিসিং), তাহলে এটি একটি ParseException থ্রো করবে।
- ত্রুটি হ্যান্ডল করার জন্য try-catch block ব্যবহার করা হয়েছে এবং HelpFormatter দিয়ে ব্যবহারকারীকে সঠিক নির্দেশনা দেওয়া হচ্ছে।
3. Common Errors এবং Exception Handling
Error 1: Missing Argument for an Option
কিছু অপশন এমন হয়, যেগুলোর জন্য আর্গুমেন্ট প্রয়োজন। যদি আপনি আর্গুমেন্ট ছাড়া অপশনটি প্রদান করেন, তাহলে এটি ত্রুটি সৃষ্টি করবে।
উদাহরণ:
options.addOption("f", "file", true, "Input file");
যদি আপনি কমান্ড লাইনে -f প্রদান করেন কিন্তু আর্গুমেন্ট হিসেবে কোনো ফাইল নাম না দেন, তাহলে এটি একটি ত্রুটি সৃষ্টি করবে।
Error Handling:
try {
cmd = parser.parse(options, args);
} catch (MissingArgumentException e) {
System.err.println("Missing argument for option: " + e.getMessage());
// Print help message
}
Error 2: Unrecognized Option
যদি আপনি এমন একটি অপশন দেন যা Options অবজেক্টে সংজ্ঞায়িত নয়, তবে এটি ত্রুটি সৃষ্টি করবে।
উদাহরণ:
java CommandLineParserExample -z
এখানে -z একটি অজানা অপশন, যা Options এ নেই। এটি UnrecognizedOptionException ছুড়ে দিবে।
Error Handling:
try {
cmd = parser.parse(options, args);
} catch (UnrecognizedOptionException e) {
System.err.println("Unrecognized option: " + e.getMessage());
HelpFormatter formatter = new HelpFormatter();
formatter.printHelp("CommandLineParserExample", options);
}
Error 3: Invalid Argument Type
অপশনের জন্য যদি আপনি ভুল টাইপের আর্গুমেন্ট দেন (যেমন, একটি পূর্ণসংখ্যার জন্য স্ট্রিং বা একটি ফাইলের জন্য অন্য কোনো ইনপুট), এটি একটি ত্রুটি সৃষ্টি করবে।
Error Handling:
try {
cmd = parser.parse(options, args);
} catch (NumberFormatException e) {
System.err.println("Invalid argument type: " + e.getMessage());
HelpFormatter formatter = new HelpFormatter();
formatter.printHelp("CommandLineParserExample", options);
}
4. Error Handling Example:
import org.apache.commons.cli.*;
public class CommandLineParserExample {
public static void main(String[] args) {
// Create options object
Options options = new Options();
// Add short and long options
options.addOption("h", "help", false, "Show help");
options.addOption("f", "file", true, "Input file");
options.addOption("v", "verbose", false, "Verbose output");
CommandLineParser parser = new DefaultParser();
CommandLine cmd = null;
try {
// Parse the command line arguments
cmd = parser.parse(options, args);
// If help option is provided
if (cmd.hasOption("h")) {
HelpFormatter formatter = new HelpFormatter();
formatter.printHelp("CommandLineParserExample", options);
return;
}
// Process the file option
if (cmd.hasOption("f")) {
System.out.println("File: " + cmd.getOptionValue("f"));
}
// Verbose mode
if (cmd.hasOption("v")) {
System.out.println("Verbose mode enabled");
}
} catch (ParseException e) {
// Handle parsing errors
System.err.println("Error parsing command line arguments: " + e.getMessage());
HelpFormatter formatter = new HelpFormatter();
formatter.printHelp("CommandLineParserExample", options);
}
}
}
Output for Errors:
Missing Argument:
Error parsing command line arguments: Missing argument for option: fUnrecognized Option:
Error parsing command line arguments: Unrecognized option: -zInvalid Argument Type:
Error parsing command line arguments: Invalid argument for option: -f
সারাংশ
Apache Commons CLI লাইব্রেরি কমান্ড লাইন পার্সিংয়ের সময় Errors এবং Exception Handling করতে সহায়তা করে। আপনি ParseException ব্যবহার করে ত্রুটিগুলি হ্যান্ডেল করতে পারেন এবং HelpFormatter ব্যবহার করে ব্যবহারকারীকে সঠিক হেল্প মেসেজ প্রদর্শন করতে পারেন। সাধারণ ত্রুটিগুলোর মধ্যে Invalid Arguments, Missing Options, এবং Unrecognized Options রয়েছে, যা সহজেই try-catch ব্লক দিয়ে হ্যান্ডেল করা যায়।
Read more