Используя Apache Commons CLI 1.2 здесь. У меня есть исполняемый JAR, который должен взять 2 варианта времени исполнения, fizz
и buzz
; обе строки, которые требуют аргументов/значений. Я бы как (если это вообще возможно) мое приложение будет выполняться следующим образом:Commons CLI не выполняет настройки моей командной строки
ява -jar MyApp.jar -fizz "Alrighty, тогда!" -Будз: «Позаботьтесь, до свидания!»
В этом случае значение для параметра fizz
будет "Alrighty, то!" И т.д.
Вот мой код:
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;
}
}
}
Когда я запускаю это я получаю следующий вывод:
Fizz является: нулевой
Что мне нужно сделать для моего кода, чтобы мое приложение могло быть вызвано так, как я его хочу? Или, что ближе, я могу добраться до него?
Бонусные баллы: Если кто-то может объяснить мне разницу между withArgName(...)
, withLongOpt(...)
и create(...)
аргументов OptionBuilder
«s, так как я прохожу в том же значении для них все, как так:
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");
1) Ваш код не компилируется (один отсутствующая точка с запятой, не декларируются исключения). 2) Для меня это работает. Я получаю ожидаемый «Fizz: Alrighty, then!». – Seelenvirtuose
Спасибо @Seelenvirtuose (+1) - извините за запятую (копия n пасты), я добавил ее. Вы говорите, что это работает на вас? Можете ли вы вставить точный вызов командной строки, который вы используете? Еще раз спасибо! – smeeb