8

में मैं कमांड लाइन तर्कों को पार्स करने के लिए अपाचे कॉमन्स सीएलआई का उपयोग करता हूं।अपाचे कॉमन्स सीएलआई बहु-तर्क विकल्प नाम -हेल्प विकल्प

मैं सहायता में एकाधिक तर्क मान नाम प्रदर्शित करने का एक तरीका ढूंढ रहा हूं। यहाँ विकल्प "startimport" में से एक तर्क के लिए एक उदाहरण है:

Option startimport = OptionBuilder 
       .withArgName("environment") 
       .hasArg() 
       .withDescription(
         "Description") 
       .create("startimport"); 

जब मैं का उपयोग -help इसे बाहर प्रिंट:

-startimport <environment>     Description 

Thatfs ठीक। लेकिन अगर मैं दो तर्कों का उपयोग करना चाहता हूं तो क्या होगा?

Option startimport = OptionBuilder 
       .withArgName("firstArg secondArg") 
       .hasArgs(2) 
       .withDescription("Description") 
       .create("startimport "); 

दो तर्क पार्स समस्या नहीं है, लेकिन मैं "-help" में निम्नलिखित उत्पादन हैं:

startimport <firstArg> <secondArg>     Description 

लेकिन वर्तमान में मैं सिर्फ मिलेगा:

startimport <firstArg secondArg>     Description 

है उस समस्या के लिए एक उचित समाधान है?

उत्तर

9

मैंने इस समस्या को हल करने के लिए एक शरारती तरीका इस्तेमाल किया।

OptionBuilder.hasArgs(3); 
    OptionBuilder.withArgName("hostname> <community> <oid"); 
    OptionBuilder.withDescription("spans switch topology. Mutually exclusive with -s"); 
    Option my_a = OptionBuilder.create("a"); 

यह अब सहायता में सही ढंग से दिखाई देता है। हालांकि मुझे यकीन नहीं है कि इसके परिणाम हैं या नहीं।

24

मुझे इस समस्या को सही ढंग से व्यवहार करने के तरीके को हल करने का एक तरीका मिला, और सोचा कि मैं साझा करूंगा क्योंकि यह उन पृष्ठों में से एक है जहां Google ने मुझे शोध करते समय नेतृत्व किया था। यह कोड कॉमन्स सीएलआई 1.2 का उपयोग करके लिखा गया था।

Option searchApp = OptionBuilder.withArgName("property> <value") 
      .withValueSeparator(' ') 
      .hasArgs(2) 
      .withLongOpt("test") 
      .withDescription("This is a test description.") 
      .create("t"); 

सहायता संदेश लगता है:

java -jar program.jar -t id 5 

और एक String [] के तर्कों में पुनः प्राप्त किया जा सकता है:

-t,--test <property> <value> This is a test description. 

यह इस तरह कमांड लाइन से इस्तेमाल किया जा सकता इस तरह कोड:

Options options = new Options(); 
options.addOption(searchApp); 
PosixParser parser = new PosixParser(); 
CommandLine cmd = parser.parse(options, args); 
String[] searchArgs = cmd.getOptionValues("t"); 

फिर आप searchArgs[0] और searchArgs[1] के साथ मान पुनर्प्राप्त कर सकते हैं।

संबंधित मुद्दे