最新版のCLIでは、使い方が少し変わっている → cf. Jetty +Apache CLI
cli-1.0.zipをダウンロードします
commons-cli-1.0.jarをクラスパスに加えます。
package com.snail;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.OptionBuilder;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
import org.apache.commons.cli.PosixParser;
public final class CLIExam {
/**
* デフォルトコンストラクタの無効化
*/
private CLIExam() {
super();
}
/**
* @param args
* コマンドライン引数
*/
public static void main(String[] args) {
// ---------- 1.コマンド引数の定義 ----------
// コマンド引数全体を定義するオブジェクト
Options options = new Options();
// コマンド引数一つ分の定義(ソースファイル指定)
OptionBuilder.withLongOpt("source");
OptionBuilder.hasArg();
OptionBuilder.isRequired();
OptionBuilder.withArgName("ソース");
OptionBuilder.withDescription("ソースファイルを指定します");
Option srcOption = OptionBuilder.create("s");
options.addOption(srcOption);
// コマンド引数一つ分の定義(結果ファイル指定)
OptionBuilder.withLongOpt("dest");
OptionBuilder.hasArg();
OptionBuilder.isRequired();
OptionBuilder.withArgName("結果");
OptionBuilder.withDescription("結果ファイルを指定します");
Option destOption = OptionBuilder.create("d");
options.addOption(destOption);
// コマンド引数一つ分の定義(ヘルプ)
OptionBuilder.withLongOpt("help");
OptionBuilder.withDescription("このヘルプを表示します");
Option helpOption = OptionBuilder.create("h");
options.addOption(helpOption);
// ---------- 2.コマンド引数のチェック ----------
CommandLineParser parser = new PosixParser();
// CommandLineParser parser = new BasicParser();
// CommandLineParser parser = new GnuParser();
// 解析
CommandLine cmd = null;
try {
cmd = parser.parse(options, args);
} catch (ParseException e) {
// 必須オプションがない場合はヘルプを表示して終了
HelpFormatter help = new HelpFormatter();
help.printHelp(CLIExam.class.getName(), options, true);
return;
}
if (cmd.hasOption("h")) {
// ヘルプオプションが指定されていた場合には
// ヘルプを表示して終了
HelpFormatter help = new HelpFormatter();
help.printHelp(CLIExam.class.getName(), options, true);
return;
}
// ---------- 3.コマンド引数の解釈 ----------
System.out.print(cmd.getOptionValue("s"));
System.out.print("から");
System.out.print(cmd.getOptionValue("d"));
System.out.print("へコピーしました");
}
}
メソッド | 説明 | 引数例 |
create(String) | オプション文字列を指定します。2文字以上だと上手く動かない | t |
withLongOpt?(String) | オプション文字列の別名を指定します | time |
withArgName?(String) | オプション名を指定します | 時刻 |
withDescription(String) | コマンドの説明を指定します | 時刻を指定して下さい |
isRequired() | 必須項目であることを指定します | |
hasArg() | 必須のコマンド引数があることを指定します | |
hasArgs() | 「-a arg1 arg2 arg3」 のように、必須のコマンド引数が複数あることを指定します(デフォルトはスペース区切り) | |
hasOptionalArg?() | 任意のコマンド引数があることを指定します | |
hasOptionalArgs?() | 「-o op1 op2 op3」のように、任意のコマンド引数が複数あることを指定します(デフォルトはスペース区切り) | |
withType(Object) | コマンド引数をマッピングする型を指定できるはずだが、上手く動かない? | ? |
withValueSeparator?(char) | hasArgs()、hasOptionalArgs?()の区切り文字を指定します。デフォルト値はスペース | ',' |
> java com.snail.CLIExam usage: com.snail.CLIExam -s ソース -d 結果 [-h] -d,--dest <結果> 結果ファイルを指定します -h,--help このヘルプを表示します -s,--source <ソース> ソースファイルを指定します
> java com.snail.CLIExam -h usage: com.snail.CLIExam -s ソース -d 結果 [-h] -d,--dest <結果> 結果ファイルを指定します -h,--help このヘルプを表示します -s,--source <ソース> ソースファイルを指定します
> java com.snail.CLIExam -s src.zip -d dset.zip src.zipからdest.zipへコピーしました
> java com.snail.CLIExam --source src.zip --dest dset.zip src.zipからdest.zipへコピーしました