2015-11-23 9 views
6

Ero abituato a lavorare con Apache Commons Cli 1.2. Per ragioni che sono irrilevanti per questa domanda, volevo che il parser ignorasse gli argomenti se erano sconosciuti (non aggiunti ad un oggetto-Opzioni).Apache Commons CLI 1.3.1: Come ignorare gli argomenti sconosciuti?

Esempio (pseudocodice):

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 

Ho usato questa la soluzione di Pascal Schäfer: Can Apache Commons CLI options parser ignore unknown command-line options?

Questo ha funzionato bene per me su 1.2, e funziona bene su 1.3.1 pure. Ma è deprecato. Il parser che ho usato è stato sostituito dal DefaultParser. Ho cercato le funzionalità, ma non esiste un tale metodo processOptions.

Mi piacerebbe davvero usare il codice che non verrà cancellato nelle versioni successive. Qualcuno ha un'idea di come risolvere questo problema?

+0

La domanda posta è per una versione precedente del plug-in, e mi sto persino riferendo ad essa, quindi come è questa una pubblicazione? – leimooo

+0

E non risponde alla mia domanda. – leimooo

+3

Io voto per la riapertura perché la domanda chiede esplicitamente un modo non deprecato per risolvere il problema. –

risposta

0

questo dovrebbe funzionare per il vostro caso d'uso:

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

La parte importante per voi è l'argomento false che dice di non riuscire quando sono soddisfatte le opzioni sconosciute.

+1

Scusate, forse mi sono espresso male: il metodo che mi state dicendo di usare non risolve il problema, poiché il programma smetterà di analizzare l'argomento, anche se non lancia un'eccezione. Per il mio caso d'uso, l'analisi deve andare avanti, e l'argomento sconosciuto deve essere ignorato o saltato. Andando ad aggiungere alcuni dettagli alla domanda. Perdonami per quello. – leimooo

+0

È meglio modificare questa risposta poiché non è la soluzione alla domanda, ma potrebbe essere un'altra soluzione per altre persone. – SexyNerd

+0

Ho provato l'opzione sopra e parse invia ParseException (anche quando il codice dice che non dovrebbe). Forse c'è un bug in DefaultParser. – JACH