Commons CLI でソートせずにオプション一覧を出力する

Commons CLI で設定したオプションをソートせずに help 表示・出力する方法。

HelpFormatter#setOptionComparator に null を渡せばソートが無効化される。

HelpFormatter のデフォルトでは、 Options に設定したオプションが通常の文字列順序にソートされて出力される。

例えば、こんな感じで x -> b -> a の順に add していても、

Options options = new Options();
options.addOption(
    Option.builder("x").required().hasArg().argName("exe")
                    .desc("set honyarara exe").build());
options.addOption(
    Option.builder("b").hasArg().argName("path")
                    .desc("set foobar path").build());
options.addOption(
    Option.builder("a").hasArg().argName("addr")
                    .desc("set hogehoge address").build());

HelpFormatter h = new HelpFormatter();
h.printHelp(72, "hoge", "", options, 2, 2, "", true);

次の通り、文字列順でソートされて表示されてしまう。

usage: hoge [-a <addr>] [-b <path>] -x <exe>
  -a <addr>   set hogehoge address
  -b <path>   set foobar path
  -x <exe>    set honyarara exe


Options に add した順序を維持したい場合は、次のように HelpFormatter#setOptionComparator に null を指定すればソートされずに表示されるようになる。

HelpFormatter h = new HelpFormatter();
h.setOptionComparator(null);
h.printHelp(72, "hoge", "", options, 2, 2, "", true);
usage: hoge -x <exe> [-b <path>] [-a <addr>]
  -x <exe>    set honyarara exe
  -b <path>   set foobar path
  -a <addr>   set hogehoge address