8

Ich verwende Apache Commons CLI zum Parsen von Befehlszeilenargumenten.Apache Commons CLI multiple Argumente Wertnamen in der Option -help

Ich bin auf der Suche nach einer Möglichkeit, mehrere Argument Wertnamen in der Hilfe anzuzeigen. Hier ist ein Beispiel für ein Argument der Option "startimport":

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

Wenn ich -help es ausdruckt:

-startimport <environment>     Description 

Thatfs in Ordnung. Was aber, wenn ich zwei Argumente verwenden möchte?

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

die beiden Argumente Parsing ist nicht das Problem, aber ich möchte die folgende Ausgabe in der "-help":

startimport <firstArg> <secondArg>     Description 

Aber zur Zeit würde ich nur:

startimport <firstArg secondArg>     Description 

Ist gibt es eine richtige Lösung für dieses Problem?

Antwort

9

Ich benutzte eine ungezogene Weise, um dieses Problem zu lösen.

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

Es erscheint jetzt korrekt in der Hilfe. Obwohl ich nicht sicher bin, ob das Konsequenzen hat.

24

Ich fand einen Weg, dieses Problem auf eine Weise zu lösen, die sich korrekt verhält, und dachte, ich würde teilen, weil dies eine der Seiten ist, zu der mich Google während der Recherche geführt hat. Dieser Code wurde mit Commons CLI 1.2 geschrieben.

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

Die Hilfemeldung wie folgt aussieht:

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

Es kann von der Kommandozeile wie folgt verwendet werden:

java -jar program.jar -t id 5 

und ein String [] die Argumente können in abgerufen werden Code wie folgt:

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

Dann können Sie die Werte mit searchArgs[0] und searchArgs[1] abrufen.