2015-11-23 29 views
6

Kiedyś pracowałem z Apache Commons Cli 1.2. Z przyczyn, które są nieistotne dla tego pytania, chciałem, aby analizator składni ignorował argumenty, jeśli są one nieznane (nie dodane do Opcji-obiektu).Apache Commons CLI 1.3.1: Jak ignorować nieznane argumenty?

Przykład (pseudokod):

Options specialOptions; 
specialOptions.addOption(null, "help", false, "shows help"); 
specialOptions.addOption(null, "version", false, "show version"); 

CommandLineParser parser = new DefaultParser(); 
CommandLine cmd = parser.parse(options, args); //no third argument, since i dont want the program to stop parsing. 
// run program with args: --help --unknown --version 
// program shall parse --help AND --version, but ignore --unknown 

Użyłem tego rozwiązania przez Pascal Schäfer: Can Apache Commons CLI options parser ignore unknown command-line options?

To działało w porządku dla mnie na 1,2, i to działa dobrze na 1.3.1 także. Ale jest przestarzałe. Użyty parser został zastąpiony przez DefaultParser. Sprawdziłem funkcjonalności, ale nie ma takiej metody.

Naprawdę chciałbym użyć kodu, który nie zostanie usunięty w późniejszych wersjach. Czy ktoś ma pomysł, jak rozwiązać ten problem?

+0

Pytanie to dotyczy starszej wersji wtyczki, a ja nawet o tym mówię, więc jak to jest dublowane? – leimooo

+0

I to nie odpowiada na moje pytanie. – leimooo

+3

Głosuję za ponownym otwarciem, ponieważ jednoznacznie pytanie o niezastosowany sposób rozwiązania problemu. –

Odpowiedz

0

ten powinien pracować dla przypadków użycia:

Options options = new Options(); 
CommandLine commandLine = new DefaultParser().parse(options, args, false); 

Ważną częścią dla ciebie jest false argument, który mówi, aby nie zawieść, gdy nieznane opcje są spełnione.

+1

Przepraszam, może wyraziłem się źle: Metoda, którą mi polecasz, nie rozwiązuje problemu, ponieważ program przestanie analizować argument, nawet jeśli nie rzuci wyjątku. Dla mojego przypadku użycia, parsowanie musi trwać, a nieznany argument powinien zostać zignorowany lub pominięty. Dodam trochę szczegółów do pytania. Przepraszam za to. – leimooo

+0

Lepiej jest edytować tę odpowiedź, ponieważ nie jest to rozwiązanie problemu, ale może to być inne rozwiązanie dla innych osób. – SexyNerd

+0

Próbowałem powyższej opcji i parsowanie wysyła ParseException (nawet jeśli kod mówi, że nie powinien). Może jest błąd w DefaultParser. – JACH

Powiązane problemy