别名

可以为命令定义一个别名。这对于创建命令的缩短版本或在完全重命名命令的同时临时保留旧版本非常方便。

别名的格式与命令略有不同。当命令定义为数组时,它会连接成单个命令。当别名定义为数组时,它用于创建单独的别名。

使用简单的 CommandRegistration 定义别名是简单明了的,因为你得到的就是你所定义的,其中没有“魔法”。

CommandRegistration commandRegistration() {
	return CommandRegistration.builder()
		.command("mycommand")
		// define alias as myalias
		.withAlias()
			.command("myalias")
			.and()
		// define alias as myalias1 and myalias2
		.withAlias()
			.command("myalias1", "myalias2")
			.and()
		.build();
}

使用 @Command 注解定义别名稍微复杂一些,因为它可以在类级别和方法级别同时存在。以下是其工作原理的示例。

仅在方法上定义别名会得到 myalias

@Command
class MyCommands {

	@Command(command = "mycommand", alias = "myalias")
	void myCommand() {
	}
}

如果定义为数组,则为 myalias1myalias2

@Command
class MyCommands {

	@Command(command = "mycommand", alias = { "myalias1", "myalias2" })
	void myCommand() {
	}
}

仅在类级别上定义别名不起作用,它仅仅是针对 **如果定义了** 方法级别注解的指示。

@Command(alias = "myalias")
class MyCommands {

	@Command(command = "mycommand")
	void myCommand() {
	}
}

在类级别和方法级别同时定义别名会将两者结合起来,其中类级别用作前缀,方法级别用作别名的组合。类级别上的别名通常与命令前缀一起使用,以将别名保持在同一命令级别。

在这里,你会得到别名 myalias1 myalias2

@Command(alias = "myalias1")
class MyCommands {

	@Command(command = "mycommand", alias = "myalias2")
	void myCommand() {
	}
}

在方法级别上有一种特殊格式,即一个 **空字符串**,它允许你创建别名,但只使用类级别的前缀。

在这里,你会得到别名 myalias1

@Command(command = "mycommand", alias = "myalias")
class MyCommands {

	@Command(command = "", alias = "")
	void myMainCommand() {
	}

	@Command(command = "mysubcommand", alias = "mysubalias")
	void mySubCommand() {
	}
}