快速命令行界面
什么是快速 CLI?
快速 CLI 是在 Java 中创建命令行程序的最快方法。它是一个基于开源注释的框架,用于创建shell程序。它使应用程序开发人员能够构建命令行工具,而无需编写样板代码。它非常简单易学。
以下是快速功能:
- 它支持 Linux 风格的参数和选项。
- 它是基于注释的。您只需要在方法级别使用四个注释。
- 它根据用户提供的注释描述生成帮助文本
- 默认情况下,它会附加“帮助”和“退出”命令。
- 以表格/列格式打印信息,具有灵活的对齐和换行功能。
- 根据方法参数类型自动转换类型
支持的语法
CommandName [Options]... [Option-Flags]... [Arguments]...
哪里
- 期权是键值对,例如--opt1=theOptValue
- 选项-标志是布尔标志,例如 等。它们可以组合在一起作为-f-t-c-ftc
- 参数是命令的输入,例如考虑linux命令,这里的文件名是命令的参数ls -l folderNamels
hello world 例子
- 第 1 步: 从 IDE 或使用原型创建 maven 项目,并添加快速 CLI 依赖项:
- 第 2 步:创建方法,该方法将定义命令并在执行命令时被调用
<dependency>
<groupId>com.logicbig.cli</groupId>
<artifactId>quick-cli</artifactId>
<version>1.0</version>
</dependency>
3.第 3 步: 扫描类并启动外壳。
public class CommandHandler {
@Command(name = "sayHi", desc = "Test command")
public void sayHiCommand(@Argument(name = "userName", desc = "user name",
mandatory = true) String user) {
System.out.println("Hi there! " + user);
}
}
就是这样。现在从命令行运行您的主方法。
运行命令“sayHi” 运行“帮助”命令 运行“exit”
命令以终止外壳。
---------------------------------------------------------------------------
Hello World
An example shell prgoram
---------------------------------------------------------------------------
Valid Commands: [sayHi, help, exit]
Please use 'help' command to view details
Hello World>_
Hello World>sayHi Mike
Hi there! Mike
Hello World>_
Hello World>help
---------------------------------------------------------------------------
sayHi Description Test command
Usage sayHi <userName>
Argument:
userName user name(Mandatory)
help Description prints help
Usage help [<command>]
Argument:
command The command name
exit Description terminates shell
Usage exit
---------------------------------------------------------------------------
Please use double quotes for argument and option values if they contain non alphabetical characters
Option Flags can be combined together e.g. -a -b -c can be combined as -abc
Options must start with double hyphen e.g. --details=value
快速 CLI 注释
让我们考虑以下 linux 命令作为示例ls
ls --color=auto -v myDir
相应的注释用法和方法声明:
@Command(name = "ls", desc = "List information about the FILEs")
public void listCommand(
@Option(name = "color", desc = "colorize the output") String color,
@OptionFlag(name = 'v', desc = "natural sort of (version) numbers within text") boolean vFlag,
@Argument(name = "dirName", desc = "The directory, by default current directoy") String dir) {
//apply list logic here
}
我们不打算实现上述命令的逻辑。我们只是设置了注释。我们需要用于快速CLI的所有注释都在包中定义 com.logicbig.cli.annotation
以下是我们上面使用的快速 CLI 注释的细分。
命令部分 | 快速 CLI 注释 | 解释 |
ls | Command | Command应在方法级别进行注释。在此示例中,name 参数应为: 以及合适的name="ls"desc |
--color=auto | Option | Option应在方法参数上注释。在这种情况下,参数的类型应为字符串。快速CLI支持,子类型(原子类型除外)和.相应的基元也有效。java.lang.Stringjava.lang.Numberjava.lang.Boolean |
-v | OptionFlag | OptionFlag应在方法参数级别进行注释。参数的类型必须是Boolean/boolean |
myDir | Argument | Argument还应在方法参数级别进行注释。该类型可以是上述任何受支持的类型。由于命令参数不与名称关联(从用户角度),因此用户输入的值将按照它们在方法上定义的顺序进行分配。强制参数始终首先分配。 |