2011-11-10 21 views
6

在args4j我定義選項這樣的:args4j:在「用法」中如何手動排序選項?

@Option(name="-host",usage="host to connect") 
@Option(name="-port",usage="port of the host") 
@Option(name="-idle",usage="idle") 

然而,當顯示args4j幫助總是使用字母順序,以便它打印

-host - host to connect 
-idle - idle 
-port - port to connect 

這並不是無限便捷,因爲我想首先顯示必需的選項。另外,我想自己設置選項的順序,因爲有些選項(如主機和端口)應該放在一起。

如何控制args4j中的選項順序?

我發現了同樣的問題問3年前,但沒有回答http://markmail.org/message/xce6vitw6miywtos

回答

2

不能與當前Args4j(至少據我所知) - 但因爲它是開源的我會鼓勵你實現它自己並嘗試從新版本的源代碼中獲取修補程序。

從來源:org.kohsuke.args4j.CmdLineParser

// for display purposes, we like the arguments in argument order, but the options in alphabetical order 
    Collections.sort(options, new Comparator<OptionHandler>() { 
     public int compare(OptionHandler o1, OptionHandler o2) { 
      return o1.option.toString().compareTo(o2.option.toString()); 
     } 
    }); 
+0

我目前正在忙於完全其它項目(即使不是Java )但如果​​其他人可以這樣做:) – javapowered

0

這個問題仍然沒有3年後解決。但有一個解決方法。

由於CmdLineParser使用列表存儲選項,並且該列表由getOptions()暴露,你可能會得到列表,並自行排序。因爲該列表僅在構造函數中排序。您可以在構建CmdLineParser後隨時對其進行分類。然後訂購printUsage()的輸出。

這個解決方法取決於CmdLineParser的實現,所以它不是一個很好的例子。但作爲解決方法,至少在當前版本(2.0.28)上起作用。

5

您可以通過ParserProperties設置排序,然後在CmdLineParser構造函數中使用該排序。如果設置OptionSorter爲null,期權定單將被保留:

ParserProperties properties = ParserProperties.defaults(); 
properties.withOptionSorter(null); 
CmdLineParser parser = new CmdLineParser(YOUR_OPTIONS_CLASS, properties); 

所以在問題的例子,你將獲得:

-host - host to connect 
-port - port to connect 
-idle - idle