long option しか指定していないオプションが複数個あったときに HelpFormatter でヘルプを出力すると,long option しか指定しないオプションが一つしか出力されない.
調べてみると HelpFormatter#renderOptions の中で Options#helpOptions を呼び出しており,そのメソッドは shortOptions.values を List として返している.shortOptions は short option を格納した Map で,long option しか与えられていないオプションはスペース一つの short option として扱われているようなので,long option しか指定されていないオプションが複数個あった場合,無理のようだ.
で,どうしよう.Options#helpOptions はパッケージ指定のアクセス制御なので,オーバーライドできない.となると HelpFormatter の renderOption で helpOptions を呼び出している部分を getOptions を使うように変えるしかないのか.妙に痒い部分に手が届いてないんだよな Commons Cli.CommandLine のコンストラクタが protected じゃなかったり.
単に Options#helpOptions を以下のように置き換えたいだけなのに・・・
@Override
List helpOptions(){
return new ArrayList( getOptions() );
// return new ArrayList( shortOptions.values() );
}