Organizing Commands

当你的 shell 开始提供大量功能时,你可能会得到大量命令,这可能会使用户感到困惑。通过键入 help,他们将看到按字母顺序排列的令人望而生畏的命令列表,这可能并不是显示可用命令的最佳方式。

为了减轻这种可能的困惑,Spring Shell 提供了将命令分组在一起的功能,具有合理的默认值。相关的命令随后将出现在同一组中(例如 User Management Commands),并一起显示在帮助屏幕和其他位置。

默认情况下,命令将根据其实现的类进行分组,将驼峰式类名转换为单独的单词(因此 URLRelatedCommands 将变为 URL Related Commands)。这是一个明智的默认值,因为相关的命令通常已经存在于类中,因为它们需要使用相同的协作对象。

但是,如果此行为不适合你,则可以按照以下方式(按优先级排列)覆盖命令组:

  1. @ShellMethod`注释中指定一个 `group()

  2. 给命令被定义的类放置一个 @ShellCommandGroup。这适用于该类中定义的所有命令(除非被覆盖,如前文所解释的那样)。

  3. 给命令被定义的包(通过 package-info.java)放置一个 @ShellCommandGroup。这适用于该包中定义的所有命令(除非在方法或类级别上被覆盖,如前文所解释的那样)。

下面的清单显示了一个示例:

public class UserCommands {
    @ShellMethod(value = "This command ends up in the 'User Commands' group")
    public void foo() {}

    @ShellMethod(value = "This command ends up in the 'Other Commands' group",
    	group = "Other Commands")
    public void bar() {}
}

...

@ShellCommandGroup("Other Commands")
public class SomeCommands {
	@ShellMethod(value = "This one is in 'Other Commands'")
	public void wizz() {}

	@ShellMethod(value = "And this one is 'Yet Another Group'",
		group = "Yet Another Group")
	public void last() {}
}