如何创建至少有一个选项的命令
How to create a command with at least one option
我想创建一个命令,允许用户指定可用选项之一来执行命令。例如,此处是服务列表,命令是状态。用户可以对部分服务发出命令 'status --list scarlet garnet cardinal',或对完整服务集发出命令 'status --all'。我已经实施了以下内容:
@Command(name = "status", description = "checks the status of a service")
public void status(
@Option(names = "--all", description = "checks all services.") boolean all,
@Option(names = "--list", arity = "0..1", description = "checks specified services.") boolean list,
@Parameters(paramLabel = "<service>", description = "a list of service names") List<String> services) {
if (all) {
System.out.println("check all");
} else if (list) {
System.out.println("check listed");
}
}
它有效,但是有一个错误,也就是说,如果用户仅提供命令 "status" 而没有任何其他参数,则它被认为是有效的。我相信会发生这种情况,因为这两个选项都是布尔值。
我们如何纠正此问题以至少提供一个可选选项?
我认为您可以通过将 --list
选项从布尔值更改为数组或字符串集合来获得所需的行为。
例如:
@Command(name = "status", description = "checks the status of a service")
public void status(
@Option(names = "--all", description = "checks all services.") boolean all,
@Option(names = "--list", arity = "1..*", paramLabel = "<service>",
description = "checks specified services.") List<String> services) {
if (all) {
System.out.println("check all");
} else if (services != null && !services.isEmpty()) {
System.out.println("check listed");
}
}
如果选项互斥,您可以使用ArgGroup。
但对于这种情况,最简单的解决方案可能是没有选项,只有要检查的服务列表。如果用户未指定服务,则应用程序将检查所有服务。
在代码中:
@Command(name = "status",
description = "Checks the status of all services, or only the specified services.")
public void status(
@Parameters(paramLabel = "<service>", arity = "0..*",
description = "A list of service names. Omit to check all services.")
List<String> services) {
if (services == null || services.isEmpty()) {
System.out.println("check all");
} else {
System.out.println("check listed");
}
}
我想创建一个命令,允许用户指定可用选项之一来执行命令。例如,此处是服务列表,命令是状态。用户可以对部分服务发出命令 'status --list scarlet garnet cardinal',或对完整服务集发出命令 'status --all'。我已经实施了以下内容:
@Command(name = "status", description = "checks the status of a service")
public void status(
@Option(names = "--all", description = "checks all services.") boolean all,
@Option(names = "--list", arity = "0..1", description = "checks specified services.") boolean list,
@Parameters(paramLabel = "<service>", description = "a list of service names") List<String> services) {
if (all) {
System.out.println("check all");
} else if (list) {
System.out.println("check listed");
}
}
它有效,但是有一个错误,也就是说,如果用户仅提供命令 "status" 而没有任何其他参数,则它被认为是有效的。我相信会发生这种情况,因为这两个选项都是布尔值。 我们如何纠正此问题以至少提供一个可选选项?
我认为您可以通过将 --list
选项从布尔值更改为数组或字符串集合来获得所需的行为。
例如:
@Command(name = "status", description = "checks the status of a service")
public void status(
@Option(names = "--all", description = "checks all services.") boolean all,
@Option(names = "--list", arity = "1..*", paramLabel = "<service>",
description = "checks specified services.") List<String> services) {
if (all) {
System.out.println("check all");
} else if (services != null && !services.isEmpty()) {
System.out.println("check listed");
}
}
如果选项互斥,您可以使用ArgGroup。
但对于这种情况,最简单的解决方案可能是没有选项,只有要检查的服务列表。如果用户未指定服务,则应用程序将检查所有服务。
在代码中:
@Command(name = "status",
description = "Checks the status of all services, or only the specified services.")
public void status(
@Parameters(paramLabel = "<service>", arity = "0..*",
description = "A list of service names. Omit to check all services.")
List<String> services) {
if (services == null || services.isEmpty()) {
System.out.println("check all");
} else {
System.out.println("check listed");
}
}