11
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

初めてのargs4j

Last updated at Posted at 2016-12-04

#args4jとは
コマンドライン引数の解釈をしてくれるライブラリです。
http://args4j.kohsuke.org/

ex) java example.class hoge fuga -foo bar
class以降の文字列がコマンドライン引数

#前提
執筆時点最新のver2.33を使います。

使い方

使うこと自体はいたって簡単3ステップ

  1. 読込先 兼 定義のクラスを用意
  2. パーサーのインスタンスを生成
  3. メソッド起動
    以上
    beanに入っているのであとは煮るなり焼くなりお好みで
読込先クラス
import org.kohsuke.args4j.Option;

/**
 * コマンドライン引数の格納先兼定義
 */
public class ArgBean {
	@Option(name = "-f")
	public Boolean flag;
}
実行クラス
import org.kohsuke.args4j.CmdLineException;
import org.kohsuke.args4j.CmdLineParser;

public class Example {
	public static void main(String ... args) throws CmdLineException {
		//beanインスタンス生成
		ArgBean bean = new ArgBean();
		//パーサーインスタンス生成
		CmdLineParser perser = new CmdLineParser(bean);
		//パース実行
		perser.parseArgument(args);

		//画面表示 オプションが指定されていればtrue,されていなければnull
		System.out.println(bean.flag);
	}
}

読込先クラスの設定

読込先クラスでは、フィールドへアノテーションを付与することにより、コマンドライン引数の解釈方法を制御する。
引数は名前の有無で2つのアノテーションを使い分ける。
どちらにも、handlerがあるがString,数値系プリミティブとそのラッパー型,列挙型(Enum)であればなしで動く

Option

名前付き引数に対して使用するアノテーション

name

必須項目 この項目の名称を指定する
先頭は必ず、「-」にすること
org.kohsuke.args4j.CmdLineParser#isOption(String arg)でArgument扱いされてしまうことを避けるため

sample
@Option(name="hoge")
public Boolean flag;

次の起動でflagがtrueになる

コマンド
java example hoge

Argument

名前なし引数に対して使用するアノテーション

index

何番目に出現するかを指定する。配列と同じく0スタート
デフォルトが0指定されているため省略可能

sample
@Option(index="0")
//↑↓同じ
//@Option
public String str;

次の起動でstrがfooになる

コマンド
java example foo

#使用時の注意事項

  • usageはparse実行後の場合、上書きされる。
    • 出力時はparse前か新しい読込先・パーサーインスタンスを用意すること

参考先

#余談

  • サンプルの通りフィールドのみでも構成でき、読込先クラスはbeanとは呼べないような気もしますが今回の記事の範囲では言及しないでください。
  • Argumentのindexで何を思ったか1スタートにしたら例外吐いてて例外読んでもぱっと見では原因に紐付かなくてはまった。
  • org.kohsuke.args4j.spi.FieldSetter#getValue()を見るとフィールドアクセスできなかった時、setAccessibleで再アクセスを試みているので、セキュリティマネージャとか使ってると落ちるんじゃないだろうか・・・?
11
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?