此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Shell 3.3.3spring-doc.cn

位置的

位置信息主要与命令目标方法相关:spring-doc.cn

CommandRegistration.builder()
	.withOption()
		.longNames("arg1")
		.position(0)
		.and()
	.build();
小心位置参数,因为它可能很快就会出现 使这些映射到的选项变得混乱。

通常,当参数在 命令行,无论是 long 选项还是 short 选项。一般而言 有 optionsoption argumentsarguments,其中后者 是未映射到任何 spesific 选项的 sit。spring-doc.cn

然后,无法识别的参数可以具有辅助映射逻辑,其中 位置信息很重要。使用期权头寸,您是 本质上是告诉命令解析如何解释普通 RAW 模棱两可的论点。spring-doc.cn

让我们看看当我们不定义位置时会发生什么。spring-doc.cn

CommandRegistration.builder()
	.command("arity-strings-1")
	.withOption()
		.longNames("arg1")
		.required()
		.type(String[].class)
		.arity(0, 2)
		.and()
	.withTarget()
		.function(ctx -> {
			String[] arg1 = ctx.getOptionValue("arg1");
			return "Hello " + Arrays.asList(arg1);
		})
		.and()
	.build();

选项 arg1 是必需的,并且没有信息如何处理参数导致缺少选项的错误。onespring-doc.cn

shell:>arity-strings-1 one
Missing mandatory option --arg1.

现在让我们定义一个位置 。0spring-doc.cn

CommandRegistration.builder()
	.command("arity-strings-2")
	.withOption()
		.longNames("arg1")
		.required()
		.type(String[].class)
		.arity(0, 2)
		.position(0)
		.and()
	.withTarget()
		.function(ctx -> {
			String[] arg1 = ctx.getOptionValue("arg1");
			return "Hello " + Arrays.asList(arg1);
		})
		.and()
	.build();

处理参数,直到我们得到最多 2 个参数。spring-doc.cn

shell:>arity-strings-2 one
Hello [one]

shell:>arity-strings-2 one two
Hello [one, two]

shell:>arity-strings-2 one two three
Hello [one, two]