2011-10-12 12 views
7

मुझे पता है कि इस सवाल को कई बार यहां और कहीं और पूछा गया है क्योंकि मैं उत्तर खोज रहा हूं। हालांकि, यह अभी भी मुझे पहेली करता है कि कमांड लाइन पार्सर लाइब्रेरी इस सामान्य उपयोग परिदृश्य को क्यों प्रदान नहीं करती है, जहां मेरे पास उप-सामग्रियों का समूह है, प्रत्येक उपसमंद के पास आवश्यक और वैकल्पिक तर्कों का सेट है। गिट/एसवीएन में इसी प्रकार का निर्माण पाया जा सकता है, हालांकि उनके मामले में, अगर मैं गलत नहीं हूं तो सबकॉमांड कमांड एक स्टैंडअलोन प्रोग्राम है।कमांड लाइन पार्सर और उपसमूह और समूह की कमी?

संक्षेप में, मैं क्या देख रहा हूँ एक आसान तरीका है:

top_command subcmd_A [ command A's options ....] 
top_command subcmd_B [ command B's options ....] 
... 

जावा की दुनिया में, दोनों अक्सर उल्लेख किया लाइब्रेरी Apache कमान CLI और JSAP हैं। मुझे नहीं लगता कि उनमें से कोई भी इसे ध्यान में रखता है - यद्यपि आप शायद फिट करने के लिए बहुत कुछ बदल सकते हैं और अनुकूलित कर सकते हैं ... लेकिन एक विकल्प को परिभाषित करने का मूल प्रवाह, रजिस्टर ... फिर अंत में, उन सभी को पार्स करें ' टी को विभिन्न उप-सामग्रियों के साथ मामले पर विचार करने के लिए देखा गया है, सत्यापन और पार्सर को अलग-अलग तरीके से व्यवहार करने की आवश्यकता है।

शायद यहां सामान्य ज्ञान यह है कि यह बहुत ही विशिष्ट अनुप्रयोग है और इसे स्वयं को संभालने के लिए एप्लिकेशन को छोड़ दिया जाना चाहिए। एक तरीका जिस पर मैं सोच सकता हूं कि बेसकॉमैंड क्लास को परिभाषित करना है, और प्रत्येक उपसमंड इसे विस्तारित करता है और स्वयं को पंजीकृत करता है ... इसे आसान प्रबंधन के लिए तोड़ने का एक तरीका है। यदि कोई परिपक्व ढांचा ऐसा कर सकता है, तो मैं यहां किसी भी सूचक की सराहना करता हूं।

हालांकि वर्तमान पार्सर क्षमता की मेरी समझ के बारे में मैं गलत हो सकता हूं, लेकिन किसी अंतर्दृष्टि की बहुत सराहना की जाती है।

ओलिवर

उत्तर

6

हाय बस jcommander में एक देखो जो वास्तव में वर्णित परिदृश्य का समर्थन करता है ले लो। आपने कॉमन्स सीएलआई का उल्लेख किया जो रिलीज 1.X में सच है लेकिन सीएलआई 2 के लिए एक विकास मौजूद है जो इसका भी समर्थन करता है, लेकिन दुर्भाग्य से यह रिलीज कभी प्रकाशित नहीं हुआ है।

+0

मुझे नहीं पता कि मैं इस पुस्तकालय को कैसे चूक गया, लेकिन यह दिलचस्प लग रहा है। धन्यवाद। – Oliver

2

Args4j अब subcommands (संस्करण 2.0.23 या उसके साथ शुरू) का समर्थन करता है।

0

cli-parsec पर एक नज़र डालें। यह (अन्य बातों के अलावा) की सुविधा है मैं वास्तव में क्या लगता है कि आप चाहते हैं :-) https://github.com/dr1fter/cli-parsec

यह उप-आदेशों की मनमाने ढंग से नेस्टिंग सुविधाओं (उप-आदेशों उप आदेशों और इतने पर हो सकता है)। प्रत्येक उप कमांड विकल्प परिभाषित कर सकते हैं। एक साधारण उदाहरण यहाँ दिया जाता है (अलग-अलग विकल्पों के साथ दो subcommands): https://github.com/dr1fter/cli-parsec/wiki/Example

Maven टुकड़ा:

<dependency> 
    <groupId>de.dr1fter</groupId> 
    <artifactId>de.dr1fter.cli-parsec> 
    <version>0.2.1</version> 
</dependency> 
+0

आपके लिंक नाम के डोमेन/यूआरएल के आधार पर, या आपके उपयोगकर्ता नाम के समान, आप अपनी साइट से जुड़े हुए प्रतीत होते हैं। यदि आप ऐसा करते हैं, तो आपको यह खुलासा करना होगा कि यह आपकी साइट है। यदि आप यह खुलासा नहीं करते कि यह आपकी साइट है, तो इसे प्रायः स्पैम माना जाता है। देखें: [** क्या "अच्छा" आत्म प्रचार को दर्शाता है? **] (// meta.stackexchange.com/q/182212) और [स्पैमर कैसे नहीं बनें] (http://stackoverflow.com/help/promotion)। – Makyen

1

picocli मनमाने ढंग से गहराई तक नेस्टेड subcommands का समर्थन करता है।

मुख्य आदेश वैश्विक विकल्पों को परिभाषित करता है, प्रत्येक निम्न स्तर के नेस्टेड कमांड विकल्पों को जोड़ सकते हैं जो केवल उस स्तर पर लागू होते हैं।

CommandLine commandLine = new CommandLine(new MainCommand()) 
     .addSubcommand("cmd1", new ChildCommand1()) // 1st level 
     .addSubcommand("cmd2", new ChildCommand2()) 
     .addSubcommand("cmd3", new CommandLine(new ChildCommand3()) // 2nd level 
       .addSubcommand("cmd3sub1", new GrandChild3Command1()) 
       .addSubcommand("cmd3sub2", new GrandChild3Command2()) 
       .addSubcommand("cmd3sub3", new CommandLine(new GrandChild3Command3()) // 3rd 
         .addSubcommand("cmd3sub3sub1", new GreatGrandChild3Command3_1()) 
         .addSubcommand("cmd3sub3sub2", new GreatGrandChild3Command3_2()) 
           // etc 
       ) 
     ); 

आप एएनएसआई शैलियों और रंगों के साथ इसकी उपयोग सहायता भी पसंद कर सकते हैं।

ध्यान दें कि उपयोग सहायता विकल्प और स्थितित्मक पैरामीटर के अलावा पंजीकृत उप-सामग्रियों को सूचीबद्ध करती है।

enter image description here

उपयोग मदद आसानी से एनोटेशन के साथ अनुकूलित है।

enter image description here

  • एनोटेशन आधारित
  • Git शैली subcommands
  • नेस्टेड सब-subcommands
  • प्रबलता से टाइप किये विकल्प मापदंडों
  • दृढ़ता से टाइप किया स्थितीय मापदंडों
  • अनुकूलन जैसे रूपांतरण
  • बहु मूल्य विकल्पों
  • कितने तर्क एक क्षेत्र
  • धाराप्रवाह एपीआई
  • POSIX शैली क्लस्टर कम विकल्प
  • जीएनयू शैली लंबी विकल्पों
  • की खपत के लिए सहज ज्ञान युक्त मॉडल में किसी भी विकल्प उपसर्ग
  • एएनएसआई रंग की अनुमति देता है उपयोग सहायता
  • अनुकूलन उपयोग सहायता
  • एकल स्रोत फ़ाइल: अपने एप्लिकेशन को एक एकल जार
  • रखने के लिए स्रोत के रूप में शामिल करें
संबंधित मुद्दे