2011-12-21 24 views
7

Tüm Seçeneklerin bir String [] girdisinde apache'nin CLI kitaplığına sağlandığını kontrol etmenin standart bir yolunu göremiyorum. Diğer bir deyişle, seçeneklerim komut satırında GEREKLİDİR, aksi halde atmak için bir istisna istiyorum. getOpt() yöntemi argümanlar kısa adı sağlamak gibi görünüyor:Tüm argümanların Apache Commons CLI'da nasıl sağlandığından nasıl emin olunur?

Im çalışıyor BU AÇIK

PosixParser p = new PosixParser(); 
     CommandLine cli=p.parse(options,args); 
     for(Object o : options.getOptions()) 
     { 
      Option op = (Option)o; 
      if(cli.getOptionValue(op.getName())) 
      throw new ParseException("Missing argument ! " + op.getArgName() + ":"+op.getDescription()); 
    } 

GÜNCELLEME ... geçici bir çözüm olarak aşağıdaki fakat deyimi ise bir Nullpointer özel durum alma.

Ancak, op.getName() yerine opt.getLongName() ile değiştirirsem işe yarar!

1) Neden bir seçenek boş ad, henüz boş olmayan bir longname olurdu: Her durumda

.. ben 2 soru var?
2) Tüm seçeneklerin String [] sağlandığından emin olmanın bir yolu var mı? Mesela ben çağırmak istiyorum:

İşte
if(! options.isAllProvided()) 
    throw new ParseException("You are missing some options ! " + StringUtils.join(userInputArray,',')); 
+0

Sadece fark ettiğiniz: Kısa adıyla bir seçenek elde etmek için getArgName() veya başka bir yöntem yerine getOpt() öğesini çağırırsınız. – jayunit100

cevap

9

gerekli olan Birini ayarlayabilirsiniz açıklanmıştır:

Option logfile = OptionBuilder.withArgName("file") 
      .isRequired() // make it required 
      .hasArg() 
      .withDescription( "use given file for log") 
      .create("logfile"); 

(ı gerekli tüm Seçenek yapmak için kolay bir yol var sanmıyorum one step)

+1

hmmm ... bu kötü için. Bu api yeniden dirilme ihtiyacı gibi görünüyor. – jayunit100

+0

Gerçekten seçenekleri gerektiği gibi işaretlemeniz gerekiyor. Bazı seçenekler eksikse, o zaman eksik seçeneklerin listesini içeren bir istisna alırsınız. –

+0

Gerçekten de, çok ayrıntılı ve çirkin, ama 'makeRequiredOption 'gibi yöntemlerle bir Factory sınıfı yapmanın, ana sınıfınızın okunabilirliğini büyük ölçüde artırabildiğini buluyorum. – bcoughlan

İlgili konular