2015-11-06 60 views
1

我不明白如何在Commons CLI中將Options應用到DefaultParser命令行中的Commons CLI空選項

當創建對象CommandLine時,分配的Options始終爲空。

代碼

婁塊是如何解釋的共享文檔CLI:

public static void main(String[] args) { 

    Options options = new Options(); 

    options.addOption("c", false, "why are you hidding from me"); 

    CommandLineParser parser = new DefaultParser(); 

    System.out.println(args[0]); // this prints -c 

    try { 

     CommandLine line = parser.parse(options, args); 

     System.out.println(line.getArgs()[0]); // prints -c 

     Option[] o = line.getOptions(); // this is empty for some reason 

     System.out.println(o.length); // prints 0 

     if (line.hasOption("c")) { // false 

      System.out.println(" flag c found"); 
     } 
    } 

    catch(ParseException e) { 
     e.printStackTrace(); 
    } 

怎麼說,line.getOptions()是空的,以及如何正確應用這些選項?

+0

你傳遞給你的程序的命令行是什麼? – JJF

+0

-c。我基本上打開了eclipse的運行配置,並將-c傳遞給參數列表。不過我不認爲問題在那裏,因爲line.getArgs()不是空的。 – John

+0

初看,我看不出你做了什麼錯。您使用的是哪種版本的commons-cli? – dosyfier

回答

1

我只是試圖重現你的問題,但一切都對我來說沒問題。 我創建了一個簡單的maven項目,只有commons-cli:commons-cli:1.3.1依賴關係和Test主類與您在問題中提供的完全相同的方法。

當我從Windows命令行編譯並運行main方法時,例如搭配:

java -cp .;[path_to_commons_cli_jar]/commons-cli-1.3.1.jar Test -c 

然後它給我的預期輸出:

  • args由單一"-c"價值;
  • line.getArgs()返回一個空數組;
  • line.getOptions()返回由預期的Option對象組成的單個條目數組。

在eclipse中啓動程序時,可能還有一些剩餘空間在您使用的命令行中沒有被剝離?否則,你的代碼應該工作正常...