org example commons cli java command-line-interface apache-commons

java - example - CLI de Apache Commons: obtener una lista de valores para una opción



org apache commons cli (3)

Debe establecer el número máximo de valores de argumento que puede tomar la opción; de lo contrario, se supone que la opción solo tiene 1 valor de argumento

Options options = new Options(); Option option = new Option("c", "c desc"); // Set option c to take maximum of 10 arguments option.setArgs(10); options.addOption(option);

Para un CLI, tengo el requisito de pasar una matriz de entradas como entrada para una opción en particular.

Ejemplo: el siguiente comando tomaría una serie de ID de cliente y realizaría algunas operaciones.

myCommand -c 123 124 125

He implementado la CLI usando la CLI de Apache commons, y estoy usando getOptionValues ​​("c") para recuperar esta matriz.

El problema es que esto está devolviendo solo el primer elemento de la matriz, es decir, [123], mientras espero que regrese [123, 124, 125].

Una versión condensada de mi código,

CommandLine cmd; CommandLineParser parser = new BasicParser(); cmd = parser.parse(options, args); if (cmd.hasOption("c")){ String[] customerIdArray = cmd.getOptionValues("c"); // Code to parse data into int }

¿Puede alguien ayudarme a identificar el problema aquí?


Me gustaría agregar esto aquí como respuesta a @Zangdak y agregar mis conclusiones sobre el mismo problema.

Si no llama a #setArgs(int) , se producirá una excepción RuntimeException. Cuando sepa la cantidad máxima exacta de argumentos para esta opción, establezca este valor específico. Cuando este valor no se conoce, la clase Option tiene una constante para él: Option.UNLIMITED_VALUES

Esto cambiaría la respuesta de los gerrytans a lo siguiente:

Options options = new Options(); Option option = new Option("c", "c desc"); // Set option c to take 1 to oo arguments option.setArgs(Option.UNLIMITED_VALUES); options.addOption(option);


Parece que llego un poco tarde a la fiesta pero Apache commons cli evolucionó y ahora (al menos en 1.3.1) tenemos una nueva forma de establecer que puede haber un número ilimitado de argumentos

Option c = Option.builder("c") .hasArgs() // sets that number of arguments is unlimited .build(); Options options = new Options(); options.addOption(c);