2016-12-15 4 views
2

Я использую Common-CLI api для отображения справки по команде. Следующая функция отображает справку команды.Аргументы командной строки не в порядке

public static void printHelp(final Options options, final int width, final String cmdLineSyntax, 
     final String header, final String footer, final int leftPad, final int descPad, final boolean autoUsage, 
     final OutputStream out) { 
    PrintWriter writer = new PrintWriter(out); 
    final HelpFormatter helpFormatter = new HelpFormatter(); 
    helpFormatter.printHelp(writer, width, cmdLineSyntax, header, options, leftPad, descPad, footer, autoUsage); 
    writer.flush(); 
} 

Я добавил опции в следующем порядке.

Option option1 = Option.builder("A").longOpt("almost-all").desc("do not list implied . and ..").hasArg(false) 
       .build(); 

     Option option2 = Option.builder("b").longOpt("block-size").argName("SIZE> <CAPACITY> <LINE").numberOfArgs(3) 
       .desc("use SIZE-byte blocks").hasArg(true).build(); 

     Option option3 = Option.builder("c") 
       .desc("with -lt: sort by, and show, ctime (time of last modification of file status information) with -l:show ctime and sort by name otherwise: sort by ctime") 
       .hasArg(false).build(); 

     Options options = new Options(); 
     options.addOption(option1); 
     options.addOption(option2); 
     options.addOption(Option.builder().longOpt("escape").desc("print octal escapes for nongraphic characters") 
       .hasArg(false).build()); 

     options.addOption(option3); 

Когда я вызываю функцию printHelp объекта options, я получаю следующий вывод.

usage: ls [-A] [-b <SIZE> <CAPACITY> <LINE>] [-c] [--escape] 
    -A,--almost-all        do not list implied . and .. 
    -b,--block-size <SIZE> <CAPACITY> <LINE>  use SIZE-byte blocks 
    -c           with -lt: sort by, and show, ctime (time of last 
                modification of file status information) with 
                -l:show ctime and sort by name otherwise: sort by 
                ctime 
     --escape         print octal escapes for nongraphic characters 

Но я ожидаю, что следующим образом.

usage: ls [-A] [-b <SIZE> <CAPACITY> <LINE>] [-c] [--escape] 
    -A,--almost-all        do not list implied . and .. 
    -b,--block-size <SIZE> <CAPACITY> <LINE>  use SIZE-byte blocks 
     --escape         print octal escapes for nongraphic characters 
    -c           with -lt: sort by, and show, ctime (time of last 
                modification of file status information) with 
                -l:show ctime and sort by name otherwise: sort by 
                ctime 

Может ли кто-нибудь сказать мне, как я могу получить ожидаемый результат?

+0

Я не знаком с «Апач-достоянию-кли», но это, кажется, порядок создания вариантов имеет отношение к печать заказ. Поэтому вам нужно создать последнюю опцию на один шаг выше. – Seelenvirtuose

+0

Я добавляю параметры в порядке объектов. –

+0

Да, но вы создаете их в другом порядке, чем вы помещаете его в объект опций. Ответ объясняет это явно. – Seelenvirtuose

ответ

2

Я считаю, что this - это то, что вы ищете.

общественный недействительный setOptionComparator (Компаратор Компаратор) Установите компаратор, используемый для сортировки вариантов, когда они выводятся в тексте справки. Передача нулевого компаратора будет содержать параметры в том порядке, в каком они были объявлены . Параметры: компаратор - Компаратор использовать для сортировки вариантов

Ref: https://commons.apache.org/proper/commons-cli/javadocs/api-release/org/apache/commons/cli/HelpFormatter.html