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);
}
}

