最新版の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へコピーしました