3

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

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

我的程序的第一个参数应该是produceror consumer,定义我的程序将运行的模式。如果它处于consumer模式下,我想要一个-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 中执行此操作?

4

3 回答 3

4

我为这样的事情所做的是为每个班级设置单独的选项。在您的 main 中,检查第一个参数以决定将哪个列表传递给解析器。FWIW,我不认为它是“黑客”解决方案。

于 2014-08-28T15:40:02.760 回答
2

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

于 2014-08-31T19:50:06.093 回答
2

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

于 2018-09-16T03:55:53.420 回答