Logo

Spring Shell CLI 使用指南

作者

1. 概述

Spring Shell是一个用于构建功能完整的命令行界面(CLI)的框架。它提供了一个交互式shell,可以处理命令并利用Spring编程模型。

本文将介绍Spring Shell的主要特性, 包括:

  • 创建自定义命令
  • 命令可用性控制
  • 参数处理
  • Shell定制
  • 类型转换

2. Maven依赖

首先,我们需要添加 Spring Shell 的依赖:

<dependency>
    <groupId>org.springframework.shell</groupId>
    <artifactId>spring-shell</artifactId>
    <version>1.2.0.RELEASE</version>
</dependency>

3. 访问Shell

有两种主要方式可以访问Shell:

  1. 在应用入口点引导Shell:
public static void main(String[] args) throws IOException {
    Bootstrap.main(args);
}
  1. 以编程方式去执行命令:
Bootstrap bootstrap = new Bootstrap();
JLineShellComponent shell = bootstrap.getJLineShellComponent();
shell.executeCommand("help");

4. 创建命令

4.1 添加自定义命令

我们可以通过在Spring组件中添加@CliCommand注解的方法来创建自定义命令:

@Component
public class SimpleCLI implements CommandMarker {

    @CliCommand(value = { "web-get", "wg" })
    public String webGet(@CliOption(key = "url") String url) {
        return getContentsOfUrlAsString(url);
    }
    
    @CliCommand(value = { "web-save", "ws" })
    public String webSave(
      @CliOption(key = "url") String url,
      @CliOption(key = { "out", "file" }) String file) {
        // 实现保存逻辑
        return "Done.";
    }
}

4.2 命令可用性控制

使用@CliAvailabilityIndicator注解可以动态控制命令的可用性:

private boolean adminEnabled = false;

@CliAvailabilityIndicator("web-save")
public boolean isAdminEnabled() {
    return adminEnabled;
}

@CliCommand("admin-enable")
public String adminEnable() {
    adminEnabled = true;
    return "Admin commands enabled.";
}

4.3 必需参数

使用mandatory属性可以将参数设为必需:

@CliOption(key = { "out", "file" }, mandatory = true)

4.4 默认参数

空的key值可以将参数设为默认值:

@CliOption(key = { "", "url" })

4.5 帮助信息

可以为命令和选项添加帮助信息:

@CliCommand(value = "web-get", help = "获取URL内容")
public String webGet(
  @CliOption(key = "url", help = "要获取内容的URL") 
  String url) {
    // ...
}

5. Shell定制

可以通过实现以下接口来定制Shell:

  • BannerProvider: 自定义启动横幅
  • PromptProvider: 自定义提示符
  • HistoryFileNameProvider: 自定义历史文件名

6. 类型转换

Spring Shell为常见类型提供了默认转换器。我们也可以实现Converter接口来添加自定义类型转换:

@Component
public class URLConverter implements Converter<URL> {
    // 实现转换逻辑
}

7. 总结

本文介绍了Spring Shell的核心功能,包括创建自定义命令、控制命令可用性、参数处理、Shell定制以及类型转换。通过这些特性,我们可以使用Spring Shell构建功能丰富的命令行应用。

完整的示例代码可以在GitHub上找到。

分享内容