我试图使用commons-cli创建一个简单的参数解析器,我似乎无法弄清楚如何创建以下选项:
java ... com.my.path.to.MyClass producer
java ... com.my.path.to.MyClass consumer -j 8
我的程序的第一个参数应该是producer
或consumer
,定义我的程序将运行的模式。如果它处于consumer
模式,我&# 39;我希望有一个-j
参数来定义要服务的线程数。
这是我到目前为止所得到的:
Options options = new Options();
options.addOption("mode", false, "Things.");
HelpFormatter formatter = new HelpFormatter();
formatter.printHelp("startup.sh", options);
当我打印出这些选项时,mode
参数显示为-mode
。
在Python的argparse
中,我只是执行以下操作:
parser = argparse.ArgumentParser()
parser.add_argument('mode', choices=('producer', 'consumer'), required=True)
parser.print_help()
这正是我正在寻找的。我怎样才能在commons-cli中做到这一点?
答案 0 :(得分:4)
我为这样的事情所做的就是为每个班级分别设定选项。在main中,检查第一个参数以确定要传递给解析器的列表。 FWIW,我不会考虑它" hack"溶液
答案 1 :(得分:2)
JCommander就是答案。 commons-cli似乎不支持这些选择。
答案 2 :(得分:2)
picocli现在包含在Groovy 2.5.x中。它具有对子命令的内置支持。