2015-06-02 6 views
1

Когда «stopAtNonOption» является ложным, groovy сообщит вам первый вариант, который неизвестен. Есть ли все-таки список всех неизвестных вариантов, а не только первый?Groovy clibuilder показывает только первый недопустимый вариант

$ ./some_cli_program --knownOption someValue --unknown1 --unknown2 someOtherValue 

Actual

error: unrecoqnized option: --unknown1 

ожидается

error: unrecoqnized options: --unknown1 --unknown2 

ответ

1

Имея приличное сообщение "использования" как правило, достаточно хорошо. Поведение по умолчанию заключается в том, чтобы генерировать исключение из первого нераспознанного токена.

Вы можете настроить свой парсер. Пример ниже

import org.apache.commons.cli.ParseException 
import org.apache.commons.cli.UnrecognizedOptionException 
import org.codehaus.groovy.cli.GroovyPosixParser 

def cli = new CliBuilder(usage: 'myprog', stopAtNonOption: false) 
cli.a("option1") 
def unknowns = []; 
cli.parser = new GroovyPosixParser() { 
    @Override 
    protected void processOption(String arg, ListIterator iter) throws ParseException { 
     try { 
      super.processOption(arg, iter) 
     } 
     catch (UnrecognizedOptionException specialE) { 
      unknowns.push(arg); 
     } 
    } 

} 

def options = cli.parse(args) 
//on error cli.usage() 
if (!unknowns.isEmpty()) { 
    println("had unknown options") 
    unknowns.each {println it} 
    cli.usage() 
} 

//cli.usage() is probably better and enough 
+0

Иногда люди делают опечатку, и бывает трудно найти фактические ошибки, особенно когда есть много аргументов. – Sufendy

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