命令组织

当您的 Shell 开始提供大量功能时,您最终可能会拥有许多命令,这可能会让您的用户感到困惑。通过键入help,他们会看到一个令人生畏的命令列表,按字母顺序排列,但这并不总是显示可用命令的最佳方式。

为了减轻这种可能的混淆,Spring Shell 提供了将命令分组在一起的功能,并具有合理的默认值。相关的命令将最终位于同一组中(例如,用户管理命令),并在帮助屏幕和其他地方一起显示。

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

但是,如果此行为不适合您,您可以通过以下方式(按优先级顺序)覆盖命令的组:

  1. @ShellMethod注解中指定group()

  2. 在定义命令的类上放置@ShellCommandGroup。这将为该类中定义的所有命令应用组(除非如前所述被覆盖)。

  3. 在定义命令的包中放置@ShellCommandGroup(通过package-info.java)。这适用于在包中定义的所有命令(除非在方法或类级别被覆盖,如前所述)。

以下列表显示了一个示例

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() {}
}