Sponsored link
コモンズ CLI(Commons-cli)
コマンドラインの引数を処理するためのApache Jakarta ProjectのAPIです。
ライセンスはApache License2.0のオープンソースです。
使用例
基本的にBasicParserを使います。
引数エラーは以下のように処理
private void showHelp() { HelpFormatter formatter = new HelpFormatter(); formatter.printHelp(getClass().getName(), options); System.exit(0); }
単独のパラメターを処理する
二つ目の引数にfalseを渡します。これは値をもたないという意味です。
options.addOption(new Option("version", false, "version infomation"));
/* * 作成日: 2004/05/26 * License Apache 2.0 * この生成されたコメントの挿入されるテンプレートを変更するため * ウィンドウ > 設定 > Java > コード生成 > コードとコメント */ package example; import org.apache.commons.cli.*; /** * @author ak * License Apache 2.0 * * この生成されたコメントの挿入されるテンプレートを変更するため * ウィンドウ > 設定 > Java > コード生成 > コードとコメント * input * output */ public class arg1 { Options options; public arg1(String args[]){ parseArg(args); } public static void main(String[] args) { arg1 sample=new arg1(args); } private final void parseArg(String args[]) { options=new Options(); options.addOption(new Option("version", false, "version infomation")); CommandLineParser parser = new BasicParser(); try { CommandLine cmd = parser.parse(options, args); if (cmd.hasOption("version")) { parseVersion(cmd); } } catch (ParseException e) { showHelp(); } } /** * @param cmd */ private void parseVersion(CommandLine cmd) { System.out.println("version 1.0"); System.exit(0); } /** * */ private void showHelp() { HelpFormatter formatter = new HelpFormatter(); formatter.printHelp(getClass().getName(), options); System.exit(0); } }
値を持つパラメターを処理する
2つ目の引数にtrueを渡します。これは値をもつという意味です。
options.addOption(new Option("input", true, "input file"));
マイナスから始まる値はこのペアーでとる方式でないとうまくいかないようです。
-x -100 -y -200 など
/* * 作成日: 2004/05/26 * License Apache 2.0 * この生成されたコメントの挿入されるテンプレートを変更するため * ウィンドウ > 設定 > Java > コード生成 > コードとコメント */ package example; import org.apache.commons.cli.*; /** * @author ak * License Apache 2.0 * * この生成されたコメントの挿入されるテンプレートを変更するため * ウィンドウ > 設定 > Java > コード生成 > コードとコメント * input * output */ public class arg2 { Options options; private String input; public arg2(String args[]){ parseArg(args); } public static void main(String[] args) { arg2 sample=new arg2(args); System.out.println("input = "+sample.getInput()); } private final void parseArg(String args[]) { options = new Options(); options.addOption(new Option("input", true, "input file")); CommandLineParser parser = new BasicParser(); try { CommandLine cmd = parser.parse(options, args); parseInput(cmd,cmd.getOptionValue("input")); } catch (ParseException e) { showHelp(); } } /** * @param cmd * @param string */ private void parseInput(CommandLine cmd, String value) { input=value; } private void showHelp() { HelpFormatter formatter = new HelpFormatter(); formatter.printHelp(getClass().getName(), options); System.exit(0); } /** * @return */ public String getInput() { return input; } /** * @param string */ public void setInput(String string) { input = string; } }
パラメーター以外を処理する
params=cmd.getArgs();
でその他の値を取得できます。
/* * 作成日: 2004/05/26 * License Apache 2.0 * この生成されたコメントの挿入されるテンプレートを変更するため * ウィンドウ > 設定 > Java > コード生成 > コードとコメント */ package example; import org.apache.commons.cli.*; /** * @author ak * License Apache 2.0 * * この生成されたコメントの挿入されるテンプレートを変更するため * ウィンドウ > 設定 > Java > コード生成 > コードとコメント * input * output */ public class arg_param { Options options; String params[]; public arg_param(String args[]){ parseArg(args); System.out.println("param "+params.length); for(int i=0;i<params.length;i++){ System.out.println(params[i]); } } public static void main(String[] args) { arg_param sample=new arg_param(args); } private final void parseArg(String args[]) { options=new Options(); CommandLineParser parser = new BasicParser(); try { CommandLine cmd = parser.parse(options, args); params=cmd.getArgs(); } catch (ParseException e) { showHelp(); } } /** * */ private void showHelp() { HelpFormatter formatter = new HelpFormatter(); formatter.printHelp(getClass().getName(), options); System.exit(0); } }
複合
上記、3つをあわせた例です。
/* * 作成日: 2004/05/26 * License Apache 2.0 * この生成されたコメントの挿入されるテンプレートを変更するため * ウィンドウ > 設定 > Java > コード生成 > コードとコメント */ package example; import org.apache.commons.cli.*; /** * @author ak * License Apache 2.0 * * この生成されたコメントの挿入されるテンプレートを変更するため * ウィンドウ > 設定 > Java > コード生成 > コードとコメント * input * output */ public class mix { Options options; String input; String params[]; public mix(String args[]){ parseArg(args); System.out.println("input = "+input); System.out.println("param "+params.length); for(int i=0;i<params.length;i++){ System.out.println(params[i]); } } public static void main(String[] args) { mix sample=new mix(args); } private final void parseArg(String args[]) { options=new Options(); options.addOption(new Option("debug", false, "is debug")); options.addOption(new Option("input", true, "input file")); CommandLineParser parser = new GnuParser(); try { CommandLine cmd = parser.parse(options, args); if (cmd.hasOption("debug")) { parseDebug(cmd); } parseInput(cmd,cmd.getOptionValue("input")); params=cmd.getArgs(); } catch (ParseException e) { showHelp(); } } /** * @param cmd */ private void parseDebug(CommandLine cmd) { System.out.println("debug mode"); } /** * */ private void parseInput(CommandLine cmd, String value) { input=value; } private void showHelp() { HelpFormatter formatter = new HelpFormatter(); formatter.printHelp(getClass().getName(), options); System.exit(0); } }
私の使っているテンプレート
必須項目などは複雑な条件になることが多いのでやりません。
値を持たないパラメーターを処理する
private void parse{値名}(CommandLine cmd) {
}
値を持つパラメターを処理する
private void parse{値名}(CommandLine cmd, String value) {
}
パラメーター以外を処理する
フィールド
String params[];
に入れる。
使用例
/* * 作成日: 2004/05/26 * License Apache 2.0 * この生成されたコメントの挿入されるテンプレートを変更するため * ウィンドウ > 設定 > Java > コード生成 > コードとコメント */ package example; import org.apache.commons.cli.*; /** * @author ak * License Apache 2.0 * * この生成されたコメントの挿入されるテンプレートを変更するため * ウィンドウ > 設定 > Java > コード生成 > コードとコメント * input * output */ public class template { Options options; //value String input; String params[]; public template(String args[]){ parseArg(args); } public static void main(String[] args) { template sample=new template(args); } private final void parseArg(String args[]) { options=new Options(); options.addOption(new Option("debug", false, "is debug")); options.addOption(new Option("input", true, "input file")); CommandLineParser parser = new GnuParser(); try { CommandLine cmd = parser.parse(options, args); if (cmd.hasOption("debug")) { parseDebug(cmd); } parseInput(cmd,cmd.getOptionValue("input")); params=cmd.getArgs(); } catch (ParseException e) { showHelp(); } } /** * @param cmd */ private void parseDebug(CommandLine cmd) { System.out.println("debug mode"); } /** * */ private void parseInput(CommandLine cmd, String value) { input=value; } private void showHelp() { HelpFormatter formatter = new HelpFormatter(); formatter.printHelp(getClass().getName(), options); System.exit(0); } }