2015-11-23 77 views
6

Eskiden Apache Commons Cli 1.2 ile çalıştım. Bu soru için alakasız olan nedenlerden ötürü, ayrıştırıcının bilinmeyenler (Seçenekler-Nesnesine eklenmemişse) argümanları görmezden gelmesini istedim.Apache Commons CLI 1.3.1: Bilinmeyen Argümanlar nasıl yok sayılır?

Örnek (yalancı kod): Can Apache Commons CLI options parser ignore unknown command-line options?

Bu 1.2 üzerinde benim için iyi çalıştı ve o da 1.3.1 üzerinde çalışıyor:

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 

Bu Pascal Schäfer tarafından çözüm kullandı. Ama onun kullanımdan kaldırılmış. Kullandığım çözümleyici, DefaultParser ile değiştirildi. İşlevleri araştırdım ama processOptions gibi bir yöntem yok.

Daha sonraki sürümlerde silinmeyecek kodları kullanmak istiyorum. Bu sorunun nasıl çözüleceği konusunda bir fikri olan var mı?

+0

Sorulan soru, eklentinin eski bir sürümü için, ve hatta buna atıfta bulunuyor, bu nasıl bir cumhuriyetçi? – leimooo

+0

Ve sorumu sorgulamıyor. – leimooo

+3

Yeniden açılmak için oy veriyorum çünkü soru açıkça sorunu çözmek için onaylanmamış bir yöntem istiyor. –

cevap

0

Bu kullanım örneği için çalışması gerekir:

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

sizin için önemli bir parçası bilinmeyen seçenekleri karşılandığında başarısız diyor false argümandır.

+1

Özür dilerim, belki de kendimi kötü ifade ettim: Metodu kullanmamı söylediğiniz Metot, problemi çözmez, çünkü program bir istisna atmasa bile argümanı ayrıştırabilir. Benim kullanım durumumda, ayrıştırma devam etmeli ve bilinmeyen argüman sadece göz ardı edilmeli veya atlanmalıdır. Soruya bazı detaylar eklemek için gidiyor. Bunun için özür dilerim. – leimooo

+0

Sorunun çözümü olmadığı için bu cevabı düzenlemek daha iyidir, ancak diğer insanlar için başka bir çözüm olabilir. – SexyNerd

+0

Yukarıdaki seçeneği denedim ve ayrıştırma ParseException (kodun yapmaması gerektiğini söylese bile) gönderir. Belki DefaultParser'da bir hata var. – JACH