首页 > 解决方案 > 在运行时启用或禁用选项

问题描述

我正在尝试使用 Picocli 制作交互式 cli,并希望在完成 a(n) 操作/要求后显示一些选项。有没有办法在不使用 CommandSpec 的情况下做到这一点?

之前显示的选项

@Option(names = {"-c","--chooseDevice"}, description = {"Choose Devices"})
    private boolean chooseDevice;

--
some code that will initialize a device
--

之后显示的选项

@Options(names = {,"-d", "--deviceCommand", description = "some device command")
    private boolean deviceCommand;

输出应该是

//before choosing device
-c  --chooseDevice "Choose Devices"

//after choosing device
-c  --chooseDevice   "Choose Devices"
-d  --deviceCommand  "some device command"

标签: javacommand-line-interfacepicocli

解决方案


可以在运行时更改hidden选项的属性,但它确实需要使用编程 API(如CommandSpec类)。

Picocli 4.0 添加了从 中删除选项的功能CommandSpec,因此您可以将其替换为具有不同hidden属性值的选项副本。

像这样的东西:

CommandLine cmd = new CommandLine(new MyApp());

// replace the old "--device" option with a different one that is not hidden
CommandSpec spec = cmd.getCommandSpec();
OptionSpec old = spec.findOption("--device");
OptionSpec newDeviceOption = OptionSpec.builder(old).hidden(false).build();
spec.remove(old);
spec.add(newDeviceOption);

cmd.execute(args);

有关详细信息,请参阅GitHub 问题 #736 。


推荐阅读