2015-11-23 13 views
6

Ich habe mit Apache Commons Cli 1.2 gearbeitet. Aus Gründen, die für diese Frage irrelevant sind, wollte ich, dass der Parser Argumente ignoriert, wenn sie unbekannt sind (nicht zu einem Options-Objekt hinzugefügt).Apache Commons CLI 1.3.1: Wie ignoriere ich unbekannte Argumente?

Beispiel (Pseudo-Code):

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 

benutzte ich diese die Lösung von Pascal Schäfer: Can Apache Commons CLI options parser ignore unknown command-line options?

Das ist für mich auf 1.2 funktionierte gut, und es funktioniert auf 1.3.1 als auch in Ordnung. Aber es ist veraltet. Der Parser, den ich benutzte, wurde durch die DefaultParser ersetzt. Ich habe die Funktionalitäten nachgeschlagen, aber es gibt keine solche Methode processOptions.

Ich möchte wirklich Code verwenden, der in späteren Versionen nicht gelöscht wird. Hat jemand eine Idee, wie man dieses Problem löst?

+0

Die Frage, die gestellt wird, ist für eine ältere Version auf dem Plugin, und ich verweise sogar darauf, also wie ist das ein Duplikat? – leimooo

+0

Und es beantwortet meine Frage nicht. – leimooo

+3

Ich stimme für die Wiedereröffnung, weil die Frage explizit nach einer nicht veralteten Möglichkeit zur Lösung des Problems fragt. –

Antwort

0

für Ihren Anwendungsfall Dies sollte funktionieren:

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

Der wichtige Teil ist für Sie das false Argument, das nicht sagt scheitern, wenn unbekannte Optionen erfüllt sind.

+1

Entschuldigung, vielleicht habe ich mich schlecht ausgedrückt: Die Methode, die Sie mir sagen zu verwenden, löst das Problem nicht, da das Programm das Argument nicht analysiert, obwohl er keine Ausnahme auslöst. Für meinen Anwendungsfall muss das Parsen fortgesetzt werden, und das unbekannte Argument darf nur ignoriert oder übersprungen werden. Ich werde der Frage einige Details hinzufügen. Das tut mir leid. – leimooo

+0

Es ist besser diese Antwort zu bearbeiten, da es nicht die Lösung für die Frage ist, aber es könnte eine andere Lösung für andere Leute sein. – SexyNerd

+0

Ich habe versucht, die obige Option und parse sendet ParseException (auch wenn der Code sagt, sollte es nicht). Vielleicht gibt es einen Fehler in DefaultParser. – JACH