使用commons-cli创建子命令

时间:2014-08-25 20:09:33

标签: java apache-commons-cli

我试图使用commons-cli创建一个简单的参数解析器,我似乎无法弄清楚如何创建以下选项:

java ... com.my.path.to.MyClass producer 
java ... com.my.path.to.MyClass consumer -j 8

我的程序的第一个参数应该是producerconsumer,定义我的程序将运行的模式。如果它处于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中做到这一点?

3 个答案:

答案 0 :(得分:4)

我为这样的事情所做的就是为每个班级分别设定选项。在main中,检查第一个参数以确定要传递给解析器的列表。 FWIW,我不会考虑它" hack"溶液

答案 1 :(得分:2)

JCommander就是答案。 commons-cli似乎不支持这些选择。

答案 2 :(得分:2)

picocli现在包含在Groovy 2.5.x中。它具有对子命令的内置支持。