跳到主要内容

组织命令

ChatGPT-4o-mini 中英对照 Organizing Commands

当你的 shell 开始提供大量功能时,你可能会有很多命令,这可能会让用户感到困惑。通过输入 help,他们会看到一个令人畏惧的命令列表,按字母顺序排列,这可能并不总是展示可用命令的最佳方式。

为了缓解这种可能的混淆,Spring Shell 提供了将命令分组的能力,并设置了合理的默认值。相关的命令将最终归入同一组(例如,用户管理命令),并在帮助屏幕和其他地方一起显示。

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

如果这种行为不适合您,您可以通过以下方式覆盖命令的组,优先级顺序如下:

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