2010-07-22 94 views
23

對於Java中的命令行解析,我通常使用Apache Commons CLI。 任何人都可以推薦任何其他庫嗎?命令行解析:Commons CLI的替代方案?

+7

如果您打算尋求替代您平時使用的替代方法,那麼如果您要說出您的常規選項無法提供的內容,將會非常有用。 – 2010-07-22 13:22:22

+1

說實話,我並沒有想到特別缺失的功能。誠然,Apache Commons CLI是'經過測試的',但它也相當冗長。我只是想知道是否有人在這個領域引入了新的想法。在這個類別中,我想我會仔細看看下面的JCommander建議。 – Jan 2010-07-22 13:58:30

+6

可能的重複[是否有一個很好的命令行參數解析器的Java?](http://stackoverflow.com/questions/367706/is-there-a-good-command-line-argument-parser-for-java) – 2010-08-13 11:38:17

回答

21

JCommander聽起來像是一個非常簡單和有趣的方式來解析命令行參數與標註使用一次輕量級庫(從創建者TestNG的):

您註釋字段與您的選項的說明:

import com.beust.jcommander.Parameter; 

public class JCommanderTest { 
    @Parameter 
    public List<String> parameters = Lists.newArrayList(); 

    @Parameter(names = { "-log", "-verbose" }, description = "Level of verbosity") 
    public Integer verbose = 1; 

    @Parameter(names = "-groups", description = "Comma-separated list of group names to be run") 
    public String groups; 

    @Parameter(names = "-debug", description = "Debug mode") 
    public boolean debug = false; 
} 

,然後你只是問JCommander解析:

JCommanderTest jct = new JCommanderTest(); 
String[] argv = { "-log", "2", "-groups", "unit", "a", "b", "c" }; 
new JCommander(jct, argv); 

Assert.assertEquals(jct.verbose.intValue(), 2); 
+0

這是Cederic如何介紹它的:http://beust.com/weblog/2010/07/13/announcing-jcommander-1-0/ – Jan 2010-07-22 14:17:52

+0

無法找到API來打印幫助。看到相關的問題:http://stackoverflow.com/questions/30046171/how-to-print-help-using-jcommander – 2015-05-05 07:04:44

+0

JCommander現在在這裏http://jcommander.org/ – xamde 2016-06-21 10:28:35

6
+0

我欣賞這些鏈接到替代框架,我不得不承認我沒有注意到這個非常類似的問題。然而,我希望能夠找到一些人,他們實際上已經嘗試過不同的選擇,並且能夠推薦其中的一種。 – Jan 2010-07-22 14:08:11

+0

在這方面,這是我正在尋找的那種文章:http://furiouspurpose.blogspot.com/2008/07/command-line-parsing-libraries-for-java.html 謝謝! – Jan 2010-07-22 14:21:15

2

列舉了幾個在java-source.net你可以找到至少4個其他替代庫Apache的百科全書CLI。

0

getopt的-1.0.11是一個簡單易用的我的命令行arguements解析

4

我個人使用kohsuke的args4J在https://github.com/kohsuke/args4j

+0

這也是我個人的喜好。 args4j比JCommander更靈活。原則是一樣的,但使用和區分參數和選項更直觀。 – 2016-07-25 20:23:13

0

你可以嘗試commandline(相當匿名的名字,我知道)

它使用註釋命令行參數映射到一個對象模型。一對解析 模式和一系列可以各種方式組合的註釋允許您創建相當先進的命令行選項規則。

雖然它允許您將命令行參數直接映射到您的域模型 ,但您應該考慮對命令行參數使用單獨的類。