Kotlin CLI框架:Clikt、kotlinx-cli、picocli——概述与比较

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

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

开始课程

CLI 框架 for Kotlin: 创建强大的控制台应用程序



Kotlin 是一种现代语言,不仅适用于 Android 或服务器端开发,也非常适合创建控制台 (CLI) 应用程序。为了避免手动编写参数解析,有一些专门的框架可供使用。在本文中,我们将介绍三种最流行的解决方案:Clikt、kotlinx-cli 和 picocli。您将了解它们的特点,看到代码示例,并能为您的项目选择合适的工具。



为什么需要 CLI 框架?

创建命令行工具的任务会很快变得复杂:需要处理标志、选项、位置参数以及显示帮助信息。手动实现会导致错误和代码重复。框架提供了现成的机制:

  • 命令接口的声明式描述
  • 自动生成帮助信息 (--help)
  • 输入验证
  • 支持子命令 (git 风格)
  • 类型安全


1. Clikt — 最“Kotlin 风格”的框架

Clikt (https://github.com/ajalt/clikt) 是一个纯 Kotlin 库,它使用 DSL 和委托属性。它不依赖于 Java 注解,并提供了直观的 API。



安装

// build.gradle.ktsimplementation("com.github.ajalt.clikt:clikt:4.2.2")


示例:一个简单的计算器

import com.github.ajalt.clikt.core.CliktCommandimport com.github.ajalt.clikt.parameters.arguments.argumentimport com.github.ajalt.clikt.parameters.options.optionimport com.github.ajalt.clikt.parameters.types.int

class Calc : CliktCommand() { val a: Int by argument() val b: Int by argument() val multiply by option("--mult", "-m", help = "相乘,而非相加").flag()

override fun run() { val result = if (multiply) a * b else a + b echo("结果: $result") }}

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


运行: kotlin calc 5 3 --mult → 结果: 15.



Clikt 的优势:

  • 与 Kotlin 完全集成 (DSL, 委托)
  • 强大的验证系统 (自定义验证器)
  • 支持任意深度的子命令
  • 自动生成 man 页面
  • 活跃的社区和持续更新


2. kotlinx-cli — JetBrains 的轻量级解决方案

kotlinx-cli 是一个实验性库,属于 Kotlin 生态系统的一部分。它非常简约,适用于小型工具。



安装

// build.gradle.ktsimplementation("org.jetbrains.kotlinx:kotlinx-cli:0.3.6")


示例:问候程序

import kotlinx.cli.*

fun main(args: Array<String>) { val parser = ArgParser("greet") val name by parser.option(ArgType.String, shortName = "n", description = "名字") .default("世界") val times by parser.option(ArgType.Int, shortName = "t", description = "次数") .default(1)

parser.parse(args)

repeat(times) { println("你好, $name!") }}


运行: kotlin greet -n Kotlin -t 2 → 你好, Kotlin! (两次).



kotlinx-cli 的特点:

  • 非常简单的 API — 代码量最少
  • 支持基本类型 (String, Int, Boolean)
  • 不太适合复杂的命令层级
  • 实验性状态 (API 可能会变化)
  • 没有内置验证和提示


3. picocli — 源自 Java 的强大框架

picocli 是一个流行的框架,既适用于 Java 也适用于 Kotlin。它使用注解,但具有对 Kotlin DSL 的特殊支持。

推荐