আমি জাভাতে কমান্ড লাইন যুক্তিগুলি কীভাবে পার্স করব?


586

জাভাতে কমান্ড লাইন যুক্তি পার্স করার একটি ভাল উপায় কী?


3
এটি কীভাবে ব্যবহার করবেন সে সম্পর্কে আরগস ৪ জ এবং তার একটি বিশদ উদাহরণ দেখুন: মার্টিন-
থোমা.

আমি দেখতে কেমন সুন্দর এই পার্টিতে দেরি করে ফেলেছি, কিন্তু আমি জাভা জন্য একটি কম্যান্ড-লাইন যুক্তি হ্যান্ডলার লিখেছিলেন এবং GitHub থেকে এটা করা: MainArgsHandler । থ্রেডটি বন্ধ হয়ে যাওয়ার জন্য, আমি মনে করি এটি একটি খুব সহায়ক থ্রেড, তবে সাধারণ প্রোগ্রামিং আলোচনার জন্য এটি সম্ভবত স্ট্যাক এক্সচেঞ্জ প্রোগ্রামার্স সাইটে স্থানান্তরিত করা উচিত।
ববুলাস

@ রেডগ্লাইফ - দেখে মনে হচ্ছে এসও / এসই তাদের নিয়মগুলি সহজীকরণের প্রয়োজন। প্রশ্ন হওয়া উচিত ছিল: How to parse java command line arguments?। তবে সত্যিই কেউ এটি করতে কোড লিখতে চান না বরং একটি সরঞ্জাম ব্যবহার করতে চান। তবে সরঞ্জাম এবং পছন্দগুলি অনুসন্ধান করা গঠনমূলক নয় :(
অ্যালিকেলজিন-কিলাকা

6
পুনরায় খোলার পক্ষে ভোট দিয়েছেন। @ অ্যালেকএলজিন: সত্যই, তাদের তাদের মধ্যপন্থী প্রক্রিয়াটি পর্যালোচনা করা দরকার। আমি সন্দেহ করি যে এতগুলি প্রশ্ন বন্ধ করার জন্য একটি ব্যাজ রয়েছে এবং এটি মডারেটরদের অত্যধিক alousর্ষান্বিত হওয়ার জন্য প্রলুব্ধ করছে।
রেডগ্লাইফ

8
এই প্রশ্নটি খারাপ / এক-লাইনের উত্তর এবং সরঞ্জামের প্রস্তাবনার জন্য হানিপোট। এটি বন্ধ থাকা উচিত।
জাল

উত্তর:


404

এগুলি পরীক্ষা করে দেখুন:

অথবা আপনার নিজস্ব রোল:


উদাহরণস্বরূপ, আপনি এইভাবে commons-cli2 স্ট্রিংয়ের যুক্তিগুলি পার্স করতে ব্যবহার করেন:

import org.apache.commons.cli.*;

public class Main {


    public static void main(String[] args) throws Exception {

        Options options = new Options();

        Option input = new Option("i", "input", true, "input file path");
        input.setRequired(true);
        options.addOption(input);

        Option output = new Option("o", "output", true, "output file");
        output.setRequired(true);
        options.addOption(output);

        CommandLineParser parser = new DefaultParser();
        HelpFormatter formatter = new HelpFormatter();
        CommandLine cmd;

        try {
            cmd = parser.parse(options, args);
        } catch (ParseException e) {
            System.out.println(e.getMessage());
            formatter.printHelp("utility-name", options);

            System.exit(1);
        }

        String inputFilePath = cmd.getOptionValue("input");
        String outputFilePath = cmd.getOptionValue("output");

        System.out.println(inputFilePath);
        System.out.println(outputFilePath);

    }

}

কমান্ড লাইন থেকে ব্যবহার:

$> java -jar target/my-utility.jar -i asd                                                                                       
Missing required option: o

usage: utility-name
 -i,--input <arg>    input file path
 -o,--output <arg>   output file

40
নোট করুন যে অন্যান্য অনেক অ্যাপাচি লাইব্রেরির মতো নয়, অ্যাপাচি সি এল এলির কোনও নির্ভরতা নেই।
ভ্লাদিমির ডিউজেভ

9
অনেকগুলি অ্যাপাচি-কমন্স প্রকল্পের সর্বনিম্নতা হ'ল তারা কম এবং কম কমিট করে এবং শেষ পর্যন্ত অপ্রচলিত হয়ে পড়ে।
ব্রেট রায়ান

4
অ্যাপাচি সিএলআই প্রকল্পের জন্য এখানে "ব্যবহারের পরিস্থিতি" পৃষ্ঠাটি রয়েছে, কীভাবে কীভাবে এটি ব্যবহার শুরু করা যায় তা বিশদ: commons.apache.org/cli/usage.html
ব্র্যাড পার্কস

আমি মনে করি না আরগস 4 জে / জকম্যান্ডারের মতো ঠিক সেখানে আছে যেখানে আপনি একটি ইন্টারফেসটি সংজ্ঞায়িত করেন এবং পদ্ধতিগুলি বারণ করেন? আমি কখনও ক্লাসের অনুরাগ বাড়তে সক্ষম হইনি যা "স্পোকি আদ্যক্ষর" ব্যক্তিগত ক্ষেত্র ...
ট্রেজকাজ

5
@ রেমকোপোমা আপনার পিকোক্লি লাইব্রেরিটি দেখতে দুর্দান্ত দেখাচ্ছে এবং এটি করার জন্য আপনাকে ধন্যবাদ। তবে আমি বিবেচনা করছি আপনি এখানে এবং অন্যান্য পোস্টগুলিতে কী করছেন (স্বীকৃত উত্তরগুলি সম্পাদনা করুন এবং এটি আপনার পোস্টের মূল লেখকের নয় এমন একটি সম্পাদনা প্রকাশ না করে এটির শীর্ষে আপনার লাইব্রেরিটির প্রচার করুন) এটি আপনার সংযম ক্ষমতাগুলির একটি ভয়ঙ্কর ভয়াবহ অপব্যবহার। এটি অন্য মোডে ফ্ল্যাগিং করা হচ্ছে।
আলেকজান্ডার মালাখভ

311

আরও সাম্প্রতিক জেকম্যান্ডারটি একবার দেখুন

আমি এটি তৈরি করেছি। আমি প্রশ্ন বা বৈশিষ্ট্য অনুরোধ পেয়ে খুশি।


7
আপনি জকম্যান্ডারকে পছন্দ করেছেন :-) পতাকাগুলি কীভাবে ব্যবহার করা হয় সে সম্পর্কে আমি খুব বেশি অর্থবহ যুক্ত করতে চাইনি, সুতরাং আপনার ব্যবহৃত টীকাগুলিতে আপনাকে কেবল প্রতিশব্দ যুক্ত করতে হবে: @ পরিমিতি (নামগুলি = {"-h", "- -হেল্প "}) আমি ভেবেছিলাম এটি একটি যুক্তিসঙ্গত আপস।
সিড্রিক বিস্ট

14
দুর্দান্ত সরঞ্জাম শক্তিশালী, নমনীয় এবং আপনার বিরক্তিকর, traditionalতিহ্যবাহী বিকল্প পার্সারদের মোকাবেলা করতে হবে না।
ইয়ানগিলহাম

3
হ্যাঁ, আমি মনে করি আপনি আমার কমান্ড লাইন আর্গুমেন্টটি ঠিক তেমনভাবে লিখেছিলেন যা আপনি জকমন্ডার লিখেছিলেন same মহান কাজ.
এসআরজি

9
@ সিড্রিকবিস্ট, এটি একটি উজ্জ্বল গ্রন্থাগার, আমি আপনাকে অনেক ধন্যবাদ। যেহেতু আমরা আমাদের নিজস্ব আরগস ক্লাসগুলি সংজ্ঞায়িত করতে পারি যা কোনও লাইব্রেরি ক্লাসের উপর নির্ভরতা ছাড়াই চারপাশে পাস করা যায় এটি এটিকে অত্যন্ত নমনীয় করে তোলে।
ব্রেট রায়ান

2
পানির বাইরে প্রতিযোগিতা উড়িয়ে!
মার্কাস জুনিয়াস ব্রুটাস

235

7
@ বেন ফ্লিনহেহে, সেখানে বেশ কিছু চমকপ্রদ এবং আকর্ষণীয় আকারের চাকা রয়েছে। আমার মনে হয় এটির একদম নিরীহ উপায় এটি করার একাধিক উপায় ছাড়াও আছে!
লেসিক্যালস্কোপ

14
আমি নোট করেছি JOpt সরল লেখক একটি খুব অনুরূপ তালিকা বজায় রাখে! আমাদের যে পাঠ্যের দরকার তা হ'ল এই তালিকাগুলি একটি তালিকাতে পরিণত করা, তালিকা বৈশিষ্ট্য এবং আগ্রহের পয়েন্টগুলি, যাতে আমাদের দরিদ্র ব্যবহারকারীরা একটি অবহিত পছন্দ করতে পারেন informed
টম অ্যান্ডারসন

1
আমি রপ তৈরি করেছি - github.com/ryenus/rop , যা টীকাগুলি ভিত্তিক সমাধানের বৈশিষ্ট্য যা আপনি প্লেইন ক্লাস এবং ক্ষেত্রের মাধ্যমে কমান্ড এবং বিকল্পগুলি ঘোষণা করেন, কমান্ড লাইন পার্সার তৈরির জন্য বেশ কয়েকটি ঘোষণামূলক উপায়। এটি অ্যাপ্লিকেশনগুলির মতো গিট (একক-সেমিডি) বা মাভেন (বহু-সেমিডি) তৈরি করতে পারে।
ryenus

8
তালিকাভুক্ত বেশিরভাগ প্রকল্পগুলি মূলত পরিত্যক্ত হয়। তালিকাটি দেখার পরে আমি বলব যে বড় হিটরগুলি, যেগুলি সক্রিয়ভাবে রক্ষণাবেক্ষণ করা এবং জনপ্রিয়, কমন্স-ক্লিপ, জকমন্ডার, আর্গস 4 জে, জোপ-সিম্পল এবং পিকোক্লি বলে মনে হচ্ছে। আরগপারস ৪ জে এবং ক্লাই-পার্সারের মতো জিনিসের লেখকদের কাছে ক্ষমা - আমাকে কিছুটা নির্বিচারে র‌্যাঙ্কিং করতে হয়েছিল, এবং শীর্ষ পাঁচটি বেছে নিয়েছিলাম, স্পষ্টতই তালিকার অন্যান্য প্রকল্পগুলি জনপ্রিয় এবং এখনও সক্রিয় বিকাশের অধীনে।
জর্জ হকিন্স

2
আমি কাউকে চ্যালেঞ্জ জানাই প্রতিটি পার্সারের সর্বশেষ স্থিতির মুক্তির তারিখ অন্তর্ভুক্ত করুন।
এইচ

50

2020, কমন্স সিএলআই এর চেয়ে আরও ভাল করার সময় ... :-)

আপনার নিজের জাভা কমান্ড লাইন পার্সার তৈরি করা উচিত, বা একটি লাইব্রেরি ব্যবহার করা উচিত?

অনেকগুলি ছোট ছোট ইউটিলিটি-এর মতো অ্যাপ্লিকেশন সম্ভবত অতিরিক্ত বাহ্যিক নির্ভরতা এড়াতে তাদের নিজস্ব কমান্ড লাইন পার্সিং করে। পিকোক্লি একটি আকর্ষণীয় বিকল্প হতে পারে।

পিকোক্লি একটি আধুনিক গ্রন্থাগার এবং সহজেই শক্তিশালী, ব্যবহারকারী-বান্ধব, গ্রেয়ালভিএম-সক্ষম কমান্ড লাইন অ্যাপ্লিকেশন তৈরির কাঠামো। এটি 1 উত্স ফাইলে থাকে তাই অ্যাপসগুলি নির্ভরতা যুক্ত এড়াতে উত্স হিসাবে এটি অন্তর্ভুক্ত করতে পারে।

এটি রঙ, স্বতঃপূরণ, সাবকম্যান্ড এবং আরও অনেক কিছু সমর্থন করে। জাভাতে লিখিত, গ্রোভি, কোটলিন, স্কালা ইত্যাদি থেকে ব্যবহারযোগ্য

এএনএসআই রঙের সাথে ন্যূনতম ব্যবহারে সহায়তা

বৈশিষ্ট্য:

  • টীকাগুলি ভিত্তিক: ঘোষণামূলক , প্রতিলিপি এড়ানো এবং প্রোগ্রামারের অভিপ্রায় প্রকাশ করে
  • সুবিধাজনক: ব্যবহারকারীর ইনপুট পার্স করুন এবং কোডের এক লাইনের সাথে আপনার ব্যবসায়িক লজিক চালান
  • দৃ everything ়ভাবে টাইপ করা সমস্ত কিছু - কমান্ড লাইন বিকল্পগুলির পাশাপাশি অবস্থানগত পরামিতি
  • পসিএক্স ক্লাস্টার্ড সংক্ষিপ্ত বিকল্পগুলি ( <command> -xvfInputFileপাশাপাশি <command> -x -v -f InputFile)
  • ফাইন-গ্রেড কন্ট্রোল : একটি আরটি মডেল যা ন্যূনতম, সর্বাধিক এবং পরিবর্তনশীল সংখ্যক পরামিতিগুলিকে অনুমতি দেয়, যেমন "1..*","3..5"
  • সাবকম্যান্ডগুলি (স্বেচ্ছাসেবী গভীরতায় বাসা বাঁধতে পারে)
  • বৈশিষ্ট্য সমৃদ্ধ : কম্পোজেবল আরগ গ্রুপ, বিভাজনে উদ্ধৃত আরোগুলি, পুনরাবৃত্তযোগ্য সাবকম্যান্ড এবং আরও অনেক কিছু
  • ব্যবহারকারী-বান্ধব : ব্যবহারের সাহায্যের বার্তাটি ব্যবহারের বাকি অংশের বিকল্প নামগুলির মতো গুরুত্বপূর্ণ উপাদানগুলির বিপরীতে রঙ ব্যবহার করে যা ব্যবহারকারীর উপর জ্ঞানীয় বোঝা হ্রাস করতে সহায়তা করে
  • গ্র্যালভিএম নেটিভ চিত্র হিসাবে আপনার অ্যাপ্লিকেশন বিতরণ করুন
  • জাভা 5 এবং উচ্চতর সাথে কাজ করে
  • বিস্তৃত এবং সাবধানী ডকুমেন্টেশন

ব্যবহারের সাহায্যের বার্তাটি টীকাগুলির সাথে কাস্টমাইজ করা সহজ (প্রোগ্রামিং ছাড়াই)। উদাহরণ স্বরূপ:

বর্ধিত ব্যবহারের সাহায্যের বার্তা( উত্স )

কী কী সহায়তা সহায়তা বার্তাগুলি সম্ভব তা দেখানোর জন্য আমি আরও একটি স্ক্রিনশট যুক্ত করে প্রতিহত করতে পারিনি। ব্যবহারের সহায়তা হ'ল আপনার আবেদনের মুখ, তাই সৃজনশীল হোন এবং মজা করুন!

পিকোক্লি ডেমো

দাবি অস্বীকার: আমি পিকোকলি তৈরি করেছি। মতামত বা প্রশ্ন খুব স্বাগত।


5
বিশুদ্ধ প্রতিভা! এই উত্তরটি নীচে সমাহিত করা লজ্জাজনক। অ্যাপাচি কমন্স সিএলআই হ'ল ভারবজ, বগী এবং দীর্ঘ সময় আপডেট হয়নি। এবং আমি গুগলের সিএলআই পার্সারটি ব্যবহার করতে চাই না কারণ আমি আমার কমান্ড লাইনের যুক্তি ব্যবহারের ইতিহাসের ভিত্তিতে টার্গেটযুক্ত বিজ্ঞাপন চাই না। তবে এটি যাইহোক পিকোকলির চেয়ে কিছুটা ভার্বোজ দেখাচ্ছে।
পিট

2
আমি এখানে দ্বিতীয় @ পিটকে ... উপরের তালিকার মধ্য দিয়ে গেলাম যা নীচে সমাধিস্থ হওয়ার সাথে সাথে সময়টির সম্পূর্ণ অপচয় ছিল। এটি এক মাইলের মধ্যে শীর্ষের উত্তর হওয়া উচিত। দারূন কাজ! আমার প্রয়োজনীয়তাগুলি অ্যাপাচি সি এল এল বা এই অন্যান্য পার্সারগুলির দ্বারা আচ্ছাদন করা যায়নি couldn't তারা পিকোকলির জন্যও চ্যালেঞ্জিং ছিল তবে এটি আমার যে সিনট্যাক্স / আচরণটি চেয়েছিল তার নিকটতম জিনিসটি উপহার দিতে সক্ষম হয়েছিল এবং আমার কী প্রয়োজন তা হ্যাক করার জন্য যথেষ্ট নমনীয় ছিল। বোনাস হিসাবে এটি দুর্দান্ত লাগছে এএনএসআই স্টাফকে ধন্যবাদ।
শাই আলমগ

@ শাইআলমগ শীর্ষ-ভোট প্রাপ্ত উত্তরটি 10 ​​বছরের পুরানো এবং পুরানো। আমি সম্মত হই যে 2019 সালে কমন্স সিএলআই-এর প্রস্তাব দেওয়া আইএমএইচওকে বিভ্রান্ত করছে। উপরের উত্তরটিকে আরও আধুনিক করে তুলতে দয়া করে পুনরায় লেখার বিষয়টি বিবেচনা করুন ।
রিমকো পপমা

আমি দেখতে পেয়েছি আপনি ইতিমধ্যে এটি চেষ্টা করে এসেছেন, আমার মনে হয় না এটি আমার পক্ষে কাজ করবে ... আপনি যদি 1 পিকোলির মতো নামটি বেছে নিয়ে থাকেন তবে আমরা তৃতীয় উত্তর বর্ণমালা অনুসারে বাছাই করতে পারতাম ;-)
শাই আলমগ

আমার ধারণা আমার পরিবর্তনটি উল্টে যাওয়ার কারণ হ'ল আমি আমার অধিভুক্তি প্রকাশ করি নি (যে আমি লেখক)। অন্যান্য লোকদের এই সমস্যাটি থাকা উচিত নয়।
রিমকো পপমা

23

আমি JOpt ব্যবহার করেছি এবং এটি বেশ কার্যকর খুঁজে পেয়েছি: http://jopt-simple.sourceforge.net/

প্রথম পৃষ্ঠাটি প্রায় 8 টি বিকল্প গ্রন্থাগারগুলির একটি তালিকাও সরবরাহ করে, সেগুলি পরীক্ষা করে দেখুন এবং আপনার প্রয়োজন অনুসারে সবচেয়ে বেশি পছন্দ করুন pick


21

কেউ ইদানীং আরগস 4 জে আমাকে ইঙ্গিত করেছেন যা টীকা ভিত্তিক। আমি সত্যিই এটা পছন্দ করি!


1
আরগস 4 জে জন্য +1! অত্যন্ত মানব-বান্ধব, নমনীয় এবং বোধগম্য। আমি মনে করি জাভা সিএলআই অ্যাপ্লিকেশন তৈরির জন্য এটি স্ট্যান্ডার্ড গো টু লাইব্রেরি হওয়া উচিত।
জেরিন

দুর্দান্ত যে এটি আনঅর্ডারড (ফিল্ড অর্ডার অনুসারে বাছাই করা) ব্যবহারের মুদ্রণটি পরিচালনা করতে পারে, যা জকম্যান্ডার পারে না এবং এটি আরও নমনীয়।
ড্যানিয়েল হুরি

@ ড্যানিয়েলহুরি শুধু তথ্যের জন্য, এই কার্যকারিতাটি জকম্যান্ডারে যুক্ত করা হয়েছে (ফেব্রুয়ারী 2017 এর শেষদিকে কিছুটা সময় ধরে)।
নাথান

9

এটি Google এর কমান্ড লাইনটি বাজেল প্রকল্পের অংশ হিসাবে লাইব্রেরি ওপেন সোর্সাকে পার্সিং করছে। ব্যক্তিগতভাবে আমি মনে করি এটি সেখানকার সেরা এবং আপাচি সি এল এলির চেয়ে অনেক সহজ।

https://github.com/pcj/google-options

স্থাপন

Bazel

maven_jar(
    name = "com_github_pcj_google_options",
    artifact = "com.github.pcj:google-options:jar:1.0.0",
    sha1 = "85d54fe6771e5ff0d54827b0a3315c3e12fdd0c7",
)

Gradle

dependencies {
  compile 'com.github.pcj:google-options:1.0.0'
}

ম্যাভেন

<dependency>
  <groupId>com.github.pcj</groupId>
  <artifactId>google-options</artifactId>
  <version>1.0.0</version>
</dependency>

ব্যবহার

OptionsBaseআপনার @Option(গুলি) প্রসারিত এবং সংজ্ঞায়িত করে এমন একটি শ্রেণী তৈরি করুন ।

package example;

import com.google.devtools.common.options.Option;
import com.google.devtools.common.options.OptionsBase;

import java.util.List;

/**
 * Command-line options definition for example server.
 */
public class ServerOptions extends OptionsBase {

  @Option(
      name = "help",
      abbrev = 'h',
      help = "Prints usage info.",
      defaultValue = "true"
    )
  public boolean help;

  @Option(
      name = "host",
      abbrev = 'o',
      help = "The server host.",
      category = "startup",
      defaultValue = ""
  )
  public String host;

  @Option(
    name = "port",
    abbrev = 'p',
    help = "The server port.",
    category = "startup",
    defaultValue = "8080"
    )
    public int port;

  @Option(
    name = "dir",
    abbrev = 'd',
    help = "Name of directory to serve static files.",
    category = "startup",
    allowMultiple = true,
    defaultValue = ""
    )
    public List<String> dirs;

}

যুক্তিগুলি পার্স করুন এবং সেগুলি ব্যবহার করুন।

package example;

import com.google.devtools.common.options.OptionsParser;
import java.util.Collections;

public class Server {

  public static void main(String[] args) {
    OptionsParser parser = OptionsParser.newOptionsParser(ServerOptions.class);
    parser.parseAndExitUponError(args);
    ServerOptions options = parser.getOptions(ServerOptions.class);
    if (options.host.isEmpty() || options.port < 0 || options.dirs.isEmpty()) {
      printUsage(parser);
      return;
    }

    System.out.format("Starting server at %s:%d...\n", options.host, options.port);
    for (String dirname : options.dirs) {
      System.out.format("\\--> Serving static files at <%s>\n", dirname);
    }
  }

  private static void printUsage(OptionsParser parser) {
    System.out.println("Usage: java -jar server.jar OPTIONS");
    System.out.println(parser.describeOptions(Collections.<String, String>emptyMap(),
                                              OptionsParser.HelpVerbosity.LONG));
  }

}

https://github.com/pcj/google-options


ওহে পল. আমি যখন আপনার উত্তর বা আপনার প্রকল্পের ডকুমেন্টেশন পড়ি তখন এটি কোন ধরণের কমান্ড লাইন পরিচালনা করতে পারে সে সম্পর্কে আমার কোনও ধারণা নেই। উদাহরণস্বরূপ, আপনি এর মতো কিছু সরবরাহ করতে পারেন myexecutable -c file.json -d 42 --outdir ./out। এবং আমি দেখতে পাচ্ছি না আপনি কীভাবে সংক্ষিপ্ত / দীর্ঘ / বর্ণনার বিকল্পগুলি সংজ্ঞায়িত করেন ... চিয়ার্স
ওলিব্রে


8

Yeap।

আমি মনে করি আপনি এর মতো কিছু খুঁজছেন: http://commons.apache.org/cli

অ্যাপাচি কমন্স সি এল এল লাইব্রেরি কমান্ড লাইন ইন্টারফেস প্রসেসিংয়ের জন্য একটি এপিআই সরবরাহ করে।


7

আমি জানি যে এখানে বেশিরভাগ লোকেরা কেন আমার পথকে অপছন্দ করে তার 10 মিলিয়ন কারণ সন্ধান করতে যাচ্ছেন, তবে কিছু নয়। আমি জিনিসগুলি সহজ রাখতে পছন্দ করি, তাই আমি '=' ব্যবহার করে মানটি থেকে কীটি আলাদা করে এটিকে একটি হ্যাশম্যাপে সঞ্চয় করি:

Map<String, String> argsMap = new HashMap<>();
for (String arg: args) {
    String[] parts = arg.split("=");
    argsMap.put(parts[0], parts[1]);
} 

আপনি যে আর্গুমেন্টটি প্রত্যাশা করছেন তার সাথে আপনি সর্বদা একটি তালিকা বজায় রাখতে পারেন, যদি ব্যবহারকারী কোনও যুক্তি ভুলে যায় বা কোনও ভুল ব্যবহার করে থাকে তবে ... আপনি যদি খুব বেশি বৈশিষ্ট্য চান তবে এই সমাধানটি আপনার পক্ষে যেমন না হয় তবে।


7

এগুলি হতে পারে

  • JArgs কমান্ড লাইন বিকল্প জাভা জন্য পার্সিং স্যুট - এই ক্ষুদ্র প্রকল্পটি জাভা প্রোগ্রামার ব্যবহারের জন্য কমান্ড লাইন বিকল্প পার্সারগুলির একটি সুবিধাজনক, কমপ্যাক্ট, প্রাক-প্যাকেজড এবং বিস্তৃতভাবে ডকুমেন্টেড স্যুট সরবরাহ করে। প্রাথমিকভাবে, জিএনইউ-স্টাইল 'গেটোপ্ট' এর সাথে সামঞ্জস্যপূর্ণ পার্সিং সরবরাহ করা হয়।

  • রিটোপট, জাভার জন্য আলটিমেট অপশন পার্সার - যদিও, বেশ কয়েকটি কমান্ড লাইন বিকল্পের মান প্রস্তুত করা হয়েছে, রিটোপট অপ্ট প্যাকেজে নির্ধারিত কনভেনশনগুলি অনুসরণ করে।


6

আপনি অসুখের এই মেটা-নিবন্ধটি জাম্পিং পয়েন্ট হিসাবে আকর্ষণীয় বলে মনে করতে পারেন:

http://furiouspurpose.blogspot.com/2008/07/command-line-parsing-libraries-for-java.html


2
এই লোকটি বেশ বেহুদা "কমন্স সিএলআই স্পষ্টতই এখানে বিকল্পগুলির মধ্যে প্রাচীনতম, এবং মন্তব্যকারীদের কাছ থেকে খুব সম্মান পাই না, তাই আমি সত্যিই এটি খুব ঘনিষ্ঠভাবে দেখিনি ..", তবে যাইহোক লিঙ্কটির জন্য ধন্যবাদ thanks
জেমস ম্যাকমাহন

5

আমি আর একটি লিখেছি: http://argparse4j.sourceforge.net/

আরগপারস ৪ জে পাইথনের আরগপার্সের ভিত্তিতে জাভা জন্য একটি কমান্ড লাইন আর্গুমেন্ট পার্সার গ্রন্থাগার।


স্ট্যাক ওভারফ্লোতে স্বাগতম! আপনার উত্তর পোস্ট করার জন্য ধন্যবাদ! দয়া করে স্ব-প্রচারের এফএকিউ অবশ্যই মনোযোগ সহকারে পড়তে ভুলবেন না ।
অ্যান্ড্রু নাপিত

5

আপনি যদি gnu getopt এর সাথে পরিচিত হন তবে এখানে একটি জাভা বন্দর রয়েছে: http://www.urbanophile.com/arenn/hacking/download.htm

কিছু শ্রেণি উপস্থিত রয়েছে যা এটি করে:



4

আপনি যদি ইতিমধ্যে স্প্রিং বুট ব্যবহার করে থাকেন তবে বাক্স থেকে আর্গুমেন্ট পার্সিংয়ের বিষয়টি আসে।

আপনি যদি শুরুর পরে কিছু চালাতে চান তবে ApplicationRunnerইন্টারফেসটি প্রয়োগ করুন :

@SpringBootApplication
public class Application implements ApplicationRunner {

  public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
  }

  @Override
  public void run(ApplicationArguments args) {
    args.containsOption("my-flag-option"); // test if --my-flag-option was set
    args.getOptionValues("my-option");     // returns values of --my-option=value1 --my-option=value2 
    args.getOptionNames();                 // returns a list of all available options
    // do something with your args
  }
}

runপ্রসঙ্গটি সফলভাবে শুরু হওয়ার পরে আপনার পদ্ধতিটি চাওয়া হবে।

আপনি যদি নিজের অ্যাপ্লিকেশন প্রসঙ্গে আগুন জ্বালানোর আগে আপনার যুক্তিগুলির অ্যাক্সেসের প্রয়োজন হয় তবে আপনি কেবল অ্যাপ্লিকেশন যুক্তিগুলি ম্যানুয়ালি পার্স করতে পারেন:

@SpringBootApplication
public class Application implements ApplicationRunner {

  public static void main(String[] args) {
    ApplicationArguments arguments = new DefaultApplicationArguments(args);
    // do whatever you like with your arguments
    // see above ...
    SpringApplication.run(Application.class, args);
  }

}

এবং অবশেষে, আপনার যদি বিনের মধ্যে আপনার যুক্তিগুলির অ্যাক্সেসের প্রয়োজন হয় তবে কেবল ইনজেক্ট করুন ApplicationArguments:

@Component
public class MyBean {

   @Autowired
   private ApplicationArguments arguments;

   // ...
}

এটা সত্যিই দারুন :).
জন হামফ্রেস - w00te

3

আরগপারস 4 জে আমি সবচেয়ে ভাল খুঁজে পেয়েছি। এটি পাইথনের আরগপার্স লিবারি নকল করে যা খুব সুবিধাজনক এবং শক্তিশালী।


2

আপনি যদি কিছু হালকা ওজনের (জারের আকার ~ 20 কেবি) এবং সহজে ব্যবহার করতে চান তবে আপনি যুক্তি-পার্সার চেষ্টা করতে পারেন । এটি বেশিরভাগ ব্যবহারের ক্ষেত্রে ব্যবহার করা যেতে পারে, যুক্তিতে অ্যারে নির্দিষ্ট করে সমর্থন করে এবং অন্য কোনও লাইব্রেরির উপর নির্ভরতা রাখে না। এটি জাভা 1.5 বা তার উপরে জন্য কাজ করে। নীচের অংশে এটি কীভাবে ব্যবহার করতে হবে তার একটি উদাহরণ দেখায়:

public static void main(String[] args) {
    String usage = "--day|-d day --mon|-m month [--year|-y year][--dir|-ds directoriesToSearch]";
    ArgumentParser argParser = new ArgumentParser(usage, InputData.class);
    InputData inputData = (InputData) argParser.parse(args);
    showData(inputData);

    new StatsGenerator().generateStats(inputData);
}

আরও উদাহরণ এখানে পাওয়া যাবে


1
লিঙ্কটি মারা গেছে। আপনি কি আপনার প্রকল্প বন্ধ করে দিয়েছেন? :-(
বেলডাজ

2

আমি ব্যবহারের সুপারিশ করব না Apache Common CLI লাইব্রেরিটি , কারণ এটি থ্রেডএসেফ নয়।

এটি অভ্যন্তরীণ কাজ (যেমন OptionBuilder) করার জন্য স্ট্যাটিক ভেরিয়েবল এবং পদ্ধতিগুলির সাথে রাষ্ট্রীয় ক্লাস ব্যবহার করে এবং কেবল একক থ্রেডযুক্ত দৃ strongly়ভাবে নিয়ন্ত্রিত পরিস্থিতিতে ব্যবহার করা উচিত।


18
এটি মনে রাখা ভাল যে সি এল এল লাইব্রেরি থ্রেড-নিরাপদ নয়। তবে, আমি ধরে নেব কমান্ড-লাইন পার্সিংটি সাধারণত অ্যাপ্লিকেশন শুরুর সময় একক থ্রেডে করা হয় এবং তারপরে, পরামিতিগুলির উপর নির্ভর করে অন্যান্য থ্রেড শুরু হতে পারে।
আলেক্সি ইভানভ

0

পূর্বে উল্লিখিত মতামতের মধ্যে একটি হিসাবে ( https://github.com/pcj/google-options ) শুরু করা ভাল পছন্দ হবে।

আমি যুক্ত করতে চাই একটি জিনিস:

1) আপনি যদি কিছু পার্সার প্রতিবিম্ব ত্রুটিতে চলে যান তবে অনুগ্রহ করে পেয়ারার আরও একটি নতুন সংস্করণ ব্যবহার করার চেষ্টা করুন। আমার ক্ষেত্রে:

maven_jar(
    name = "com_google_guava_guava",
    artifact = "com.google.guava:guava:19.0",
    server = "maven2_server",
)

maven_jar(
    name = "com_github_pcj_google_options",
    artifact = "com.github.pcj:google-options:jar:1.0.0",
    server = "maven2_server",
)

maven_server(
    name = "maven2_server",
    url = "http://central.maven.org/maven2/",
)

2) কমান্ডলাইন চালানোর সময়:

bazel run path/to/your:project -- --var1 something --var2 something -v something

3) আপনার যখন সহায়তা সহায়তা প্রয়োজন তখন কেবল টাইপ করুন:

bazel run path/to/your:project -- --help

-1

স্প্রিং ব্যবহারকারীদের জন্য আমাদের https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/core/env/SimpleCommandLinePropertySource.html এবং তার যমজ ভাই https: //docs.spring উল্লেখ করা উচিত .io / বসন্ত / ডকস / বর্তমান / জাভাদোক-এপি / org / বসন্ত ফ্রেমওয়ার্ক / কোর / এনভি / JOptCommandLinePropertySource.html (একই কার্যকারিতা JOpt বাস্তবায়ন)। স্প্রিংয়ের সুবিধাটি হ'ল আপনি সরাসরি কমান্ড লাইন যুক্তিগুলিকে গুণাবলীতে আবদ্ধ করতে পারেন, এখানে একটি উদাহরণ রয়েছে https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/core/env/ CommandLinePropertySource.html

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.