Clikt:用于Kotlin的强大CLI框架,具有声明式语法

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Clikt:用于Kotlin的强大CLI框架



Clikt 是一个用于在Kotlin语言中创建控制台(CLI)应用程序的现代、轻量级框架。与许多其他库不同,Clikt采用声明式方法,允许通过简单的注解和lambda表达式来描述命令结构及其参数。这使得代码干净、可读且易于维护。该库既适用于小型工具,也适用于复杂的多层命令行界面。



Clikt的关键特性



  • 声明式语法:通过DSL(领域特定语言)或注解定义命令、选项和参数。
  • 自动生成帮助信息:Clikt会根据您的定义自动生成美观且结构化的--help消息。
  • 支持嵌套命令:通过简单的子命令机制创建命令层次结构(例如,git commit、git push)。
  • 值验证:内置机制用于检查类型、范围、格式和自定义条件。
  • 自动补全:原生支持为Bash、Zsh和Fish生成自动补全脚本。
  • 可测试性:无需在终端中实际运行即可测试CLI应用程序的便捷工具。


安装与配置



首先,将依赖项添加到您的build.gradle.kts中:



repositories {    mavenCentral()}

dependencies { implementation("com.github.ajalt.clikt:clikt:4.4.0")}


对于Maven,请使用:



<dependency>    <groupId>com.github.ajalt.clikt</groupId>    <artifactId>clikt</artifactId>    <version>4.4.0</version></dependency>


基本示例:问候



让我们创建一个简单的命令,该命令接受用户名和一个可选标志,用于以不同语言问候。



import com.github.ajalt.clikt.core.CliktCommandimport com.github.ajalt.clikt.parameters.arguments.argumentimport com.github.ajalt.clikt.parameters.options.flagimport com.github.ajalt.clikt.parameters.options.option

class Greet : CliktCommand() { val name: String by argument(help = "用户名") val formal: Boolean by option("--formal", "-f", help = "正式问候").flag()

override fun run() { val greeting = if (formal) "您好" else "你好" echo("$greeting, $name!") }}

fun main(args: Array<String>) = Greet().main(args)


从命令行运行:



$ kotlin greet.kts 伊万你好, 伊万!

$ kotlin greet.kts --formal 伊万您好, 伊万!

$ kotlin greet.kts --helpUsage: greet [<options>] <name>

用户名

Options: -f, --formal 正式问候 -h, --help Show this message and exit


高级示例:文件操作与子命令



考虑一个更复杂的场景——一个用于处理文本文件的工具,支持count和search子命令。



import com.github.ajalt.clikt.core.CliktCommandimport com.github.ajalt.clikt.core.subcommandsimport com.github.ajalt.clikt.parameters.arguments.argumentimport com.github.ajalt.clikt.parameters.options.defaultimport com.github.ajalt.clikt.parameters.options.optionimport java.io.File

class FileTool : CliktCommand() { override fun run() = Unit // 根命令不执行任何操作}

class Count : CliktCommand(help = "统计文件中的行数") { val file: File by argument(help = "文件路径") .validate { require(it.exists()) { "文件未找到: $it" } }

override f

推荐