У меня есть команда с подкомандами. В моем приложении я хочу, чтобы пользователь обязательно указал подкоманду. Как мне это сделать?
(См. также https://github.com/remkop/picocli/issues/529< /а>)
У меня есть команда с подкомандами. В моем приложении я хочу, чтобы пользователь обязательно указал подкоманду. Как мне это сделать?
(См. также https://github.com/remkop/picocli/issues/529< /а>)
Обновление: теперь это задокументировано в руководстве по picocli: https://picocli.info/#_required_subcommands
До пикокли 4.3 для этого можно было показать ошибку или выдать ParameterException
, если команда верхнего уровня вызывается без подкоманды.
Например:
@Command(name = "top", subcommands = {Sub1.class, Sub2.class},
synopsisSubcommandLabel = "COMMAND")
class TopCommand implements Runnable {
@Spec CommandSpec spec;
public void run() {
throw new ParameterException(spec.commandLine(), "Missing required subcommand");
}
public static void main(String[] args) {
CommandLine.run(new TopCommand(), args);
}
}
@Command(name = "sub1)
class Sub1 implements Runnable {
public void run() {
System.out.println("All good, executing Sub1");
}
}
@Command(name = "sub2)
class Sub2 implements Runnable {
public void run() {
System.out.println("All good, executing Sub2");
}
}
Начиная с picocli 4.3, это можно сделать проще, сделав команду верхнего уровня не реализовывать Runnable
или Callable
.
Если команда имеет подкоманды, но не реализует Runnable
или Callable
, picocli сделает подкоманды обязательными.
Например:
@Command(name = "top", subcommands = {Sub1.class, Sub2.class},
synopsisSubcommandLabel = "COMMAND")
class TopCommand {
public static void main(String[] args) {
CommandLine.run(new TopCommand(), args);
}
}
[
и ]
, поэтому это не идеальное решение. Обойти это можно, предоставив собственный синопсис. Подробнее см. на picocli.info/#_custom_synopsis.
- person Remko Popma; 09.12.2018
run
свою команду верхнего уровня. Вместо этого вы, вероятно, захотите использовать аннотацию @ParentCommand
. См. пример в руководстве пользователя: picocli.info/#__code_parentcommand_code_annotation
- person Remko Popma; 28.02.2019