Prev / Next / たまにっき。

Jakarta Commons CLI

Category: [Java][Tips][Jakarta]
2007-03-26

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() );
}


Category: [Java][Tips][Jakarta]