dropwizardのjarをコマンド指定なしで実行すると、
登録しているcommandの一覧出力が得られますが、
その出力内容が見ずらい(ように感じた)ため、
commandの一覧をdjango風に出力するcommandを作ってみました。
作成したコード一式は、Githubに置きました。
dropwizard-ls-command
出力結果の確認は、MAC OX X Yosemite 10.10.5 にて行っています。
1. 参考にしたサイト
2. README
3. 使い方
3.1. 以下の記述をApplicationのinitializeメソッドに追加してください。
public void initialize(Bootstrap<Configuration> bootstrap) {
bootstrap.addCommand(new LsCommand(this));
// And your initialize process..
}
3.2. コンパイル後、以下のコマンドを実行すると、django風のSubCommand一覧を出力します。
- コマンド
java -jar target/xxx.jar ls
- 出力結果
3.3. カテゴリ別にコマンドの一覧を出力することができます。
- CommandクラスにCommandInfoアノテーションを付与してください。
@CommandInfo(category = "RDBTask")
public class YourCommand<T extends Configuration> extends ConfiguredCommand<T> {
- コマンド
java -jar target/xxx.jar ls
- 出力結果(例)
4. その他わかったこと
4.1 argparse4jでのSubCommandオプション値の取得方法
dropwizardでは、Commandの引数受け取りのため、argparse4jというLibraryを使用していますが、
オプションとして[-l]を使えるようにしようとして、なかなか受け取りができずに小1時間消費しました。
※こちら、作成者Tatsuhiro Tsujikawaさんという日本の方でした!知らなかった。。
- オプション値の登録の記述は以下になります。
// Add -l Option
subparser.addArgument("-l")
.action(Arguments.storeTrue())
.help("List in long format. If the output is to a terminal, command's helps is output after command description");
- 上記にオプション値の受け取りの記述は以下になります。(-は付けない。)
Boolean hasLOptinon = namespace.getBoolean("l");
4.2 jansiライブラリ
いい感じでコンソール出力に色を付けるライブラリないかと探したら、 jansiを見つけました。
READMEの記載を鵜呑みにして、
System.out.println( ansi().eraseScreen().fg(RED).a("Hello").fg(GREEN).a(" World").reset() );
という記載を複数行に渡り行ったところ、謎の改行が大量入ってしまってしまいました。
複数行に渡り、出力を行う場合は、以下の記述でよいようです。
System.out.println( ansi().fg(RED).a("Hello").fg(GREEN).a(" World").reset() );
5. 作ったあとの感想、わからなかったところ
5.1 CommandInfoアノテーションの作りが適当
カテゴリ分けするためだけのアノテーションになっていて、
何か付帯情報を付与し、且つ、オプション追加でもっとドキュメントっぽいのを出力できたりするとよいかと思いました。
ただ、個人的に使う分にはこれくらいでいいやです。
5.2 DropWizardのjarが芋づるで落ちてくる
gradleの設定が足りないのか、そうゆうものなのか調べてないですが、
dropwizard関連のjarが芋づるでダウンロードされてしまいます。
設定が変えられるなら、変えたいです。
5.3 DropwizardのスケジュールJob管理用のライブラリがあったのでその登録Jobをうまいこと出力する
dropwizardのschedule job用の拡張があります。
この辺りのライブラリのアノテーションを元にドキュメント的なやつを出力できてもよいかもしれません。
以上です。
コメント