更新:使用 picocli 4.3 有两种方法可以做到这一点:
- 继承选项
- 让子命令使用委托给父命令的 mixin(因此选项修改的状态在一个地方)
实现此目的的一种方法是使布尔字段静态:
class Shared {
@Option(names = "--stacktrace")
static boolean stacktrace;
}
您仍然需要子类化或使用 mixin 在每个命令和子命令中定义此选项:
@Command(subcommands = {Subcommand1.class, Subcommand2.class /*, ...*/}
class MyCommand {
@Mixin
Shared shared = new Shared();
// ...
}
@Command(name = "subcommand1")
class Subcommand1 {
@Mixin
Shared shared = new Shared();
// ...
}
这种设计的好处是现在有一个地方可以让应用程序检测最终用户是否指定--stacktrace
:静态布尔字段:
public static void main(String... args) {
assert Shared.stacktrace == false;
MyCommand myCommand = new MyCommand();
CommandLine.parseArgs(myCommand, "subcommand1", "--stacktrace");
assert Shared.stacktrace == true;
}