8

Uso la CLI de Apache Commons para analizar argumentos de línea de comandos.Apache Commons CLI nombres de valor de argumento múltiple en la opción -help

Estoy buscando una manera de mostrar múltiples nombres de valores de argumento en la ayuda. Aquí se muestra un ejemplo de un argumento de la opción "startimport":

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

Cuando uso -help imprime:

-startimport <environment>     Description 

Thatfs bien. Pero, ¿y si quiero usar dos argumentos?

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

Análisis de los dos argumentos no es el problema, pero quiero la siguiente salida en el "-help":

startimport <firstArg> <secondArg>     Description 

Pero actualmente me acaba de llegar:

startimport <firstArg secondArg>     Description 

Es Hay una solución adecuada para ese problema?

Respuesta

9

He usado una manera traviesa para resolver este problema.

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

Aparece correctamente en la ayuda ahora. Aunque no estoy seguro si esto tiene consecuencias.

24

Encontré una manera de resolver este problema de una manera que se comporta correctamente, y pensé en compartir porque esta es una de las páginas que Google me guió mientras investigaba. Este código fue escrito usando Commons CLI 1.2.

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

El mensaje de ayuda se ve así:

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

Se puede utilizar desde la línea de comandos de la siguiente manera:

java -jar program.jar -t id 5 

y una String [] de los argumentos pueden ser recuperados en código como este:

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

Luego puede recuperar los valores con searchArgs[0] y searchArgs[1].

Cuestiones relacionadas