2011-12-21 39 views
7

我沒有看到一個標準的方式來檢查是否所有的選項都提供在一個String []輸入到 apache的CLI庫。那是 - 我的選項都是在命令行REUIRED,否則,我想拋出異常。如何確保所有參數都在Apache Commons CLI中提供?

我試着以下作爲一種變通方法,但在if語句得到一個空指針異常...

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()); 
    } 

更新本:在getopt的()方法似乎提供了論據簡稱。

但是,如果我用opt.getLongName()替換op.getName()...它的工作原理!

在任何情況下..我有2個問題:

1)爲什麼會一個選項有一個空的名字,但一個非空LONGNAME?
2)有沒有辦法簡單地確保所有選項都提供了String []?例如,我想呼籲:

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

只需注意:爲了通過短名稱獲得選項,可以調用getOpt()而不是getArgName()或任何其他方法。 – jayunit100 2011-12-21 22:19:20

回答

9

這裏是你如何設置一個選項,需要:

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

(我不認爲有一個簡單的方法,以使所需要的所有選項一步)

+1

嗯......多數民衆贊成在不好的。看起來這個api需要復活。 – jayunit100 2011-12-21 23:17:00

+0

你確實需要標記選項。如果缺少某些選項,則會收到包含缺失選項列表的異常。 – 2012-05-29 20:43:42

+0

事實上,它是冗長而醜陋的,但我發現使用'makeRequiredOption'等方法創建Factory類可以極大地提高主類的可讀性。 – bcoughlan 2013-10-21 22:49:15

相關問題