Один из способов сделать это состоит в том, чтобы сделать логическое поле статическим:
class Shared {
@Option(names = "--stacktrace")
static boolean stacktrace;
}
Вам все равно придется либо создать подкласс, либо использовать миксин для определения этой опции в каждой команде и подкомандах:
@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;
}