此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Shell 3.3.0Spring中文文档

此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Shell 3.3.0Spring中文文档

Arity 定义了选项解析需要多少参数。Spring中文文档

与arity设置相比和使用存在局限性。这些在注释中提到 以下示例。legacy annotationannotationprogrammatic
与arity设置相比和使用存在局限性。这些在注释中提到 以下示例。legacy annotationannotationprogrammatic
CommandRegistration zeroOrOne() {
	return CommandRegistration.builder()
		.command("example")
		.withOption()
			.longNames("arg")
			.arity(OptionArity.ZERO_OR_ONE)
			.and()
		.build();
}
@Command(command = "example")
String zeroOrOne(
	@Option(arity = OptionArity.ZERO_OR_ONE) String arg)
{
	return String.format("Hi '%s'", arg);
}
@ShellMethod(key = "example")
String zeroOrOne(
	@ShellOption(arity = 1) String arg)
{
	return String.format("Hi '%s'", arg);
}
表 1.可选Arity
价值 最小值/最大值

Spring中文文档

0 / 0Spring中文文档

ZERO_OR_ONESpring中文文档

0 / 1Spring中文文档

EXACTLY_ONESpring中文文档

1 / 1Spring中文文档

ZERO_OR_MORESpring中文文档

0 / 整数 MAXSpring中文文档

ONE_OR_MORESpring中文文档

1 / 整数 MAXSpring中文文档

legacy annotation不支持定义最小 arity。
legacy annotation不支持定义最小 arity。
CommandRegistration zeroOrOneWithMinMax() {
	return CommandRegistration.builder()
		.command("example")
		.withOption()
			.longNames("arg")
			.arity(0, 1)
			.and()
		.build();
}
@Command(command = "example")
String zeroOrOneWithMinMax(
	@Option(arityMin = 0, arityMax = 1) String arg)
{
	return String.format("Hi '%s'", arg);
}
@ShellMethod(key = "example")
String zeroOrOneWithMinMax(
	@ShellOption(arity = 1) String arg)
{
	return String.format("Hi '%s'", arg);
}

在下面的示例中,我们有选项 arg1,它被定义为 String[] 类型。阿里蒂 定义它至少需要 1 个参数,而不是超过 2 个。如下图所示 会引发 TooManyArgumentsOptionExceptionNotEnoughArgumentsOptionException 异常,以指示 arity 不匹配。Spring中文文档

shell:>e2e reg arity-errors --arg1
Not enough arguments --arg1 requires at least 1.

shell:>e2e reg arity-errors --arg1 one
Hello [one]

shell:>e2e reg arity-errors --arg1 one two
Hello [one, two]

shell:>e2e reg arity-errors --arg1 one two three
Too many arguments --arg1 requires at most 2.