用户定义的命令允许您将自定义命令添加到 Spring CLI。 命令的目录结构表示引入 shell 的命令和子命令。Spring中文文档

例如,在 CLI 中转换为命令的目录结构。controller\newcontroller newSpring中文文档

子命令目录中的文件包括:Spring中文文档

  • 一个名为描述命令及其参数的文件。command.yamlSpring中文文档

  • 一个或多个操作文件,用于描述向项目添加代码或配置时要执行的操作。Spring中文文档

使用以下命令向 CLI 注册用户定义的命令:Spring中文文档

command add --from <repository-url>

该存储库的内容将复制到现有项目中。Spring中文文档

例如,查看 github.com/rd-1-2022/udc-spring-controller 存储库的内容。Spring中文文档

结构

所有用户定义命令的目录结构都位于以下路径下:Spring中文文档

.spring/commands

因此,对于前面提到的用户定义的命令,命令描述文件和操作文件所在的完整目录结构为:controller newSpring中文文档

.spring/commands/controller/new

在此目录中,您可以定义:Spring中文文档

例如,github.com/rd-1-2022/udc-spring-controller 存储库的目录内容如下:Spring中文文档

.
├── README.adoc
└── .spring
    └── commands
        └── controller
            └── new
                ├── command.yaml
                ├── create-controller.yaml
                └── RestController.java

描述命令

前面提到的命令的文件内容如下:command.yamlcontroller newSpring中文文档

command:
  description: Generate a new Spring Controller
  options:
    #
    - name: feature
      description: name of the feature package
      dataType: string
      defaultValue: person
      inputType: text
      required: true

该文件包含命令的简要说明和命令行选项数组。Spring中文文档

的选项是必需的。默认值为 。namedataTypestringSpring中文文档

可以是 、 、 、 、 或 。dataTypeintintegerboolbooleandoublefloatlongshortstringSpring中文文档

Spring CLI 在运行时合并了这些命令,它们在请求常规帮助和特定于命令的帮助时出现。 以下列表显示了一个示例:Spring中文文档

$spring help

<output truncated>

User-defined Commands
       controller new: Generate a new Spring Controller

以下列表显示了第二个示例:Spring中文文档

$ spring help controller new
NAME
       controller new - Generate a new Spring Controller

SYNOPSIS
       controller new --feature String

OPTIONS
       --feature String
       name of the feature package
       [Optional, default = person]

操作文件

操作文件的结构类似于 GitHub 操作文件。Spring中文文档

操作文件可以命名为任何您喜欢的名称。CLI 查找具有 和 文件扩展名的文件。.yaml.ymlSpring中文文档

可以有任意数量的操作文件来完成特定任务。操作文件的运行顺序是深度优先,然后是字母顺序。Spring中文文档

以下列表显示了一个简单的示例:Spring中文文档

actions:
  - generate:
      to: hello.txt
      text: Hello at {{now}} on {{os-name}}.

此操作会在当前工作目录中生成一个名为 的文件,如果该文件尚不存在。 模板内容包含 kebab-case 变量名称。hello.txtSpring中文文档

和 变量来自 Java 系统属性,并自动注册到模板引擎。 变量是运行命令时的值。user-nameos-namenownew java.util.Date()Spring中文文档

作为创建 Java 代码的更实际示例,以下三个列表显示了存储库 github.com/rd-1-2022/udc-spring-controller 中命名的操作文件及其相关操作和模板化 Java 文件的内容。 该变量是一个命令选项。Controller.javafeatureSpring中文文档

command:
  description: Generate a new Spring Controller
  options:
    #
    - name: feature
      description: name of the feature package
      dataType: string
      defaultValue: person
      inputType: text
actions:
  - generate:
      to: src/main/java/{{root-package-dir}}/{{feature}}/{{capitalizeFirst feature}}Controller.java
      from: RestController.java

该字段定义要生成的文件的位置。to:Spring中文文档

如果要生成的文件已存在,则不会覆盖该文件,除非在与该字段相同的级别添加名为的其他字段。overwrite:to:Spring中文文档

package {{root-package}}.{{feature}};

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class {{capitalizeFirst feature}}Controller {

	@GetMapping("/{{feature}}")
	public String greeting() {
		return "Hello {{feature}}";
	}
}

所有命令行参数都作为变量传递到模板引擎。在这种情况下,将传递该选项。featureSpring中文文档

一个有用的内置变量是 ,它是包含注释的类所在的目录。root-package-dir@SpringApplicationSpring中文文档

模板引擎

模板引擎是 Handlebars。 默认情况下会注册多个车把帮助程序Spring中文文档

在前面的示例中,template 变量是使用 Handlebars 帮助程序的示例。{{capitalizeFirst feature}}Spring中文文档

默认情况下,向模板引擎公开多个系统变量:Spring中文文档

Spring Boot 主应用程序类所在的 Java 包名称可用作 。{{root-package}}Spring中文文档

Spring Boot 主应用程序类所在的目录以 .{{root-package-dir}}Spring中文文档

Maven 模型还公开了几个变量:Spring中文文档

创建新的用户定义命令

一个简单的入门方法是运行以下命令:Spring中文文档

spring command new hello create

这将创建一个用户定义的命令,该命令以名为 的子命令命名。hellocreateSpring中文文档

您可以通过运行 来查看 的全套选项。 以下列表显示输出为:spring command newspring command new --helpSpring中文文档

$ spring command new --help
NAME
       command new - Create a new user-defined command

SYNOPSIS
       command new --commandName String --subCommandName String --path String --help

OPTIONS
       --commandName String
       The name of the user-defined command to create
       [Optional, default = hello]

       --subCommandName String
       The name of the user-defined sub-command to create
       [Optional, default = new]

       --path String
       Path to execute command in
       [Optional]

       --help or -h
       help for command new
       [Optional]

运行将生成以下目录结构和文件。spring command new hello createSpring中文文档

.
├── README.adoc
└── .spring
    └── commands
        └── hello
            └── create
                ├── command.yaml
                └── hello.yaml

以下列表显示了该文件的内容。它包含一个名为 .command.yamlgreetingSpring中文文档

command:
  description: Generate a new file with a hello message
  options:
    #
    - name: greeting
      description: who or what to say hello to
      dataType: string
      defaultValue: World
      inputType: text     # TEXT

以下列表显示了名为 的操作文件。它生成名为hello.yamlhello.txtSpring中文文档

actions:
  - generate:
      to: hello.txt
      text: Hello {{greeting}} at {{now}} on {{os-name}}.

运行该命令时,该命令将列在标题下。User-defined Commandsspring helpSpring中文文档

...
User-defined Commands
       hello create: Generate a new file with a hello message

运行该命令将生成包含以下内容的文件:spring hello createhello.txtSpring中文文档

Hello World at Mar 9, 2023 on Linux.

了解更多

操作指南介绍了可在操作文件中使用的所有选项(用于向项目添加或修改代码和配置)。Spring中文文档