2016-11-14 4 views
2

В настоящее время я использую библиотеку Apache Commons CLI 1.3.1 для анализа аргументов командной строки и управления потоком выполнения в исполняемой банке. До сих пор все было довольно просто, а страницы documentation и example usage были относительно тщательными и полезными.Использование CLI Apache Commons для обнаружения отсутствия аргументов командной строки/параметров

Однако я все еще не понимаю, как использовать эту библиотеку для обнаружения отсутствия каких-либо аргументов или опций. Я хотел бы обнаружить это условие, а затем распечатать инструкцию использования/справки. Я обошел это, просто проверив длину массива аргументов, но я хотел бы знать, есть ли у библиотеки способ обнаружения этого условия, не проверяя наличие каждой опции.

Вот мой код с обходным оставил в:

public static void main(String[] args) 
{ 
    try 
    { 
     // create Options object 
     Options options = new Options(); 

     // add t option 
     options.addOption("t", false, "display current time"); 
     options.addOption("help", false, "print this message"); 

     CommandLineParser parser = new DefaultParser(); 
     CommandLine cmd = parser.parse(options, args); 

     if(cmd.hasOption("t")) { 
      log.debug("Received option t"); 
      // Do something 
     } 

     if (args.length <= 0 || cmd.hasOption("help")) 
     { 
      // automatically generate the help statement 
      HelpFormatter formatter = new HelpFormatter(); 
      formatter.printHelp("java -jar Client.jar <option> <arguments>", options); 
     } 
    } 
    catch (Exception ex) 
    { 
     ex.printStackTrace(); 
    } 
} 

ответ

2

Я думаю, что вы ищете getArgList или метод getArgs. Из документации:

Получить не использованную в течение Незарегистрированная опции и аргументы

Таким образом, вместо этого:

if (args.length <= 0 || cmd.hasOption("help")) 

Использование так:

if (cmd.getArgs().length == 0 || cmd.hasOption("help")) 
+0

B сные. Я неправильно понял документацию. Я думал, что это список аргументов, представленных для определенного варианта. Спасибо. BTW это должно быть 'cmd.getArgs(). Length' – Matt1776

+0

Но может быть важно отметить, что это не сработает, если ваша программа ожидает переключения без аргументов. Например, если я использую этот метод, то help будет печататься, даже если команда 'client.jar -t' – Matt1776

+1

Привет, спасибо за исправление! Если ваша программа не должна иметь избыточных аргументов, то, конечно, вы должны изменить условие и на самом деле вызвать ошибку в этом случае. – janos

 Смежные вопросы

  • Нет связанных вопросов^_^