ここではApache Commons CLI 1.2を使用します。2 つのランタイム オプションを必要とする実行可能 JAR がfizz
ありbuzz
ます。どちらも引数/値を必要とする文字列です。私は(可能な限り)私のアプリを次のように実行したいと思います:
java -jar myapp.jar -fizz "よし、じゃあ!" -バズ「さようなら、さようなら!」
この場合、fizz
オプションの値は「Alrighty, then!」などになります。
これが私のコードです:
public class MyApp {
private Options cmdLineOpts = new Options();
private CommandLineParser cmdLineParser = new GnuParser();
private HelpFormatter helpFormatter = new HelpFormatter();
public static void main(String[] args) {
MyApp myapp = new MyApp();
myapp.processArgs(args);
}
private void processArgs(String[] args) {
Option fizzOpt = OptionBuilder
.withArgName("fizz")
.withLongOpt("fizz")
.hasArg()
.withDescription("The fizz argument.")
.create("fizz");
Option buzzOpt = OptionBuilder
.withArgName("buzz")
.withLongOpt("buzz")
.hasArg()
.withDescription("The buzz argument.")
.create("buzz");
cmdLineOpts.addOption(fizzOpt);
cmdLineOpts.addOption(buzzOpt);
CommandLine cmdLine;
try {
cmdLine = cmdLineParser.parse(cmdLineOpts, args);
// Expecting to get a value of "Alright, then!"
String fizz = cmdLine.getOptionValue("fizz");
System.out.println("Fizz is: " + fizz);
} catch(ParseException parseExc) {
helpFormatter.printHelp("myapp", cmdLineOpts, true);
throw parseExc;
}
}
}
これを実行すると、次の出力が得られます。
フィズは: null
アプリを思い通りに起動できるようにするには、コードをどうする必要がありますか? または、私がそれに到達できる最も近いものは何ですか?
ボーナスポイント:と引数OptionBuilder
の違いを誰かが説明してくれたら、withArgName(...)
次のように同じ値を渡しているので:withLongOpt(...)
create(...)
Option fizzOpt = OptionBuilder
.withArgName("fizz")
.withLongOpt("fizz") } Why do I have to pass the same value in 3 times to make this work?!?
.create("fizz");