- 追加された行はこの色です。
- 削除された行はこの色です。
// 下階層用テンプレート
#topicpath
----
//ここにコンテンツを記述します。
#contents
コマンドライン引数を制御するライブラリargs4j ( http://args4j.kohsuke.org/ ) を使ってみます。
Javaのコマンドライン引数って何かとチェックするのメンドクサイですが、このライブラリを使うことで
必須チェックなどの自動化、args[i] の値をフィールドに自動でセット、usageの表示、 -u userid -p password みたいな指定、などをやってくれます。
Jenkinsの内部で Jenkins CLI でも使われている便利なライブラリです。
たとえばこんな引数を持つ、コマンドラインプログラムがあったとします。パラメタに
-U url [-p password] [-u userid]
みたいなパラメタをとるケースを考えます。ちなみにこの意味は
-U url は必須
-p password はオプション
-u userid もオプション
という意味です。
import org.kohsuke.args4j.Argument;
import org.kohsuke.args4j.Option;
public class ProgramA {
// こういうAnnotationをつける。nameはパラメタ名、aliasesは別名(の配列)、metaVarはusageに表示される文字、requiredは必須かどうか、usageは説明
@Option(name = "-U", aliases = {"--url" }, metaVar = "url", required = true, usage = "URL")
private static String url;
@Option(name = "-u", metaVar = "userid", usage = "Userid")
private static String userid;
@Option(name = "-p", metaVar = "password", usage = "Password")
private static String password;
// とりあえずは値を表示するだけ
public void execute() {
System.out.printf("url = %s \n", url);
System.out.printf("userid = %s \n", userid);
System.out.printf("password = %s \n", password);
}
}
あらかじめこのようにパラメタにAnnotationをつけておきます。このプログラムを呼び出すクラスは下記の通り;
import org.kohsuke.args4j.CmdLineException;
import org.kohsuke.args4j.CmdLineParser;
public class BatchMain {
public static void main(String[] args) {
ProgramA main = new ProgramA();
CmdLineParser parser = new CmdLineParser(main);
try {
parser.parseArgument(args);
} catch (CmdLineException e) {
System.out.println("usage:");
parser.printSingleLineUsage(System.out);
System.out.println();
parser.printUsage(System.out);
return;
}
main.execute();
}
}
こんだけです。CmdLineParserを噛ませるだけで、一通りのチェック処理とフィールドへの値のセット、usageの文字列構築などをやってくれます。必須パラメタなどがないと例外が発生し、
parser.printSingleLineUsage(System.out);
→
-U (--url) url [-p password] [-u userid]
parser.printUsage(System.out);
→
-U (--url) url : URL
-p password : Password
-u userid : Userid
と表示されます。ちょー便利ですね。
----
この記事は
#vote(おもしろかった,そうでもない)
#comment
#topicpath
SIZE(10){現在のアクセス:&counter;}