For the latest stable version, please use Spring Shell 3.4.0! |
Alias
It is possible to define an alias for a command. This is convenient for cases where you want to create a shorter version of a command or going through a complete command rename while keeping old one temporarily in place.
Format for alias is slighly different than a command. When command is defined as an array it’s concatenated together into a single command. When alias is defined as an array it’s used to create a separate aliases.
Aliases with a plain CommandRegistration
is simple and clear as you
get exactly what you define as there’s no "magic" in it.
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();
}
Defining alias with @Command
annotation is a bit more involved as it
can exist on a both class and method levels. Here are examples how it
works.
Alias just on a method gives you myalias.
@Command
class MyCommands {
@Command(command = "mycommand", alias = "myalias")
void myCommand() {
}
}
Or myalias1 and myalias2 if defined as an array.
@Command
class MyCommands {
@Command(command = "mycommand", alias = { "myalias1", "myalias2" })
void myCommand() {
}
}
Alias only on a class level does nothing as it’s simply an instruction for annotation on a method level if defined.
@Command(alias = "myalias")
class MyCommands {
@Command(command = "mycommand")
void myCommand() {
}
}
Alias on both class and method level combines those two together where class level works as an prefix and method level as combination of aliases. Alias on a class level is usually used together with a command prefix to keep aliases on a same command level.
Here you’d get alias myalias1 myalias2.
@Command(alias = "myalias1")
class MyCommands {
@Command(command = "mycommand", alias = "myalias2")
void myCommand() {
}
}
On a method level there’s a special format, that being an empty string which allows you to create an alias but it only uses prefix from a class level.
Here you’d get alias myalias1.
@Command(command = "mycommand", alias = "myalias")
class MyCommands {
@Command(command = "", alias = "")
void myMainCommand() {
}
@Command(command = "mysubcommand", alias = "mysubalias")
void mySubCommand() {
}
}