2016-03-11 1 views
2

Я работаю с apache-commons-cli для анализа аргументов командной строки в моей программе java.Исключая несколько опций в HelpFormatter.printHelp() с помощью apache-commons-cli

Сейчас я пытаюсь найти способ, чтобы исключить отображение некоторых чувствительных или отладочных вариантов с помощью использования. Кстати, я использую HelpFormatter.

Option first = Option.builder("f").hasArg().desc("First argument").build(); 
Option second = Option.builder("s").hasArg().desc("Second argument").build(); 
Option debug = Option.builder("d").hasArg().desc("Debug argument. Shouldn't be displayed in help").build(); 

commandOptions.addOption(first).addOption(second).addOption(debug); 

HelpFormatter help = new HelpFormatter(); 
help.printHelp("Test App", commandOptions); 

Это печатает все варианты. Но я не хочу, чтобы третий вариант был напечатан.

Фактический выход:

usage: Test App 
-d <arg> Debug argument. Shouldn't be displayed in help // This shouldn't be displayed. 
-f <arg> First argument 
-s <arg> Second argument 

Ожидаемый результат:

usage: Test App 
-f <arg> First argument 
-s <arg> Second argument 

Таким образом, аргументы отладки будут известны только тем людям, которые фактическая потребность знать об этом для отладки ,

Есть ли способ отключить конкретную опцию из справки, сделанные только. Но все равно разбирайте его так же, как любой другой вариант?

Я использую commons-cli-1.3.1.jar.

ответ

2

Насколько я вижу, HelpFormatter не предназначен для подкласса для чего-то подобного, особенно appendOption() является закрытым и, следовательно, не позволяет отфильтровать параметры.

Поэтому я бы просто построить два Options объектов, один для фактического разбора опций командной строки и один для печати помощи, т.е.

Option first = Option.builder("f").hasArg().desc("First argument").build(); 
Option second = Option.builder("s").hasArg().desc("Second argument").build(); 
Option debug = Option.builder("d").hasArg().desc("Debug argument. Shouldn't be displayed in help").build(); 

commandOptions.addOption(first).addOption(second).addOption(debug); 

helpOptions.addOption(first).addOption(second); 
HelpFormatter help = new HelpFormatter(); 
help.printHelp("Test App", helpOptions);