为什么 Kotlin 是 CLI 工具的理想语言?
\n\n当谈到创建控制台工具时,许多开发人员习惯性地选择 Python 或 Bash。但如果您已经熟悉 Kotlin(在我们的网站 pythonlib.ru 上,我们相信优秀的开发人员掌握多种语言),那么您就知道这种语言是多么简洁和富有表现力。使用 Kotlin 创建 CLI 工具 不仅仅是一种时尚,而是一种获得快速、类型安全且跨平台工具的真正方法。
\n\n想象一下:您编写一个 Kotlin 控制台应用程序,它通过 GraalVM 或 Kotlin/Native 编译成 JAR 或原生二进制文件。它可以在任何地方运行——从 Linux 服务器到同事的 Windows 机器。同时,代码比 Java 短 2-3 倍,并且比 Python 安全得多。听起来很诱人?让我们开始吧。
\n\n入门需要什么?
\n\n要创建 Kotlin CLI,您至少需要:
\n- \n
- 已安装的 JDK 11+(推荐 17 或 21) \n
- IntelliJ IDEA(社区版就足够了)或任何文本编辑器 \n
- Kotlin 基础知识(函数、类、集合)
- 用于构建的 Gradle 或 Maven
如果您还没有在控制台中使用过 Kotlin,请不要担心。我们将从空文件开始,逐步构建一个完整的工具,该工具可以发布并在 CI/CD 管道中使用。
\n\n步骤 1:为 CLI 工具配置项目
\n\n让我们创建一个简单的 Gradle 项目。以下是最小的 build.gradle.kts:
plugins {\n kotlin("jvm") version "1.9.22"\n application\n}\n\napplication {\n mainClass.set("com.pythonlib.cli.MainKt")\n}\n\nrepositories {\n mavenCentral()\n}\n\ndependencies {\n implementation("com.github.ajalt.clikt:clikt:4.2.2")\n implementation("org.jetbrains.kotlinx:kotlinx-cli:0.3.6")\n}\n\n请注意两个关键库:Clikt 和 Kotlinx CLI。第一个是用于创建 Kotlin CLI 工具 的最流行库。第二个是 JetBrains 的官方解决方案。在本文中,我们将使用 Clikt,因为它提供了更大的灵活性并且看起来更漂亮。
\n\n步骤 2:编写第一个命令
\n\n创建文件 src/main/kotlin/com/pythonlib/cli/Main.kt:
package com.pythonlib.cli\n\nimport com.github.ajalt.clikt.core.CliktCommand\nimport com.github.ajalt.clikt.parameters.arguments.argument\nimport com.github.ajalt.clikt.parameters.options.option\nimport com.github.ajalt.clikt.parameters.options.flag\n\nclass GreetCommand : CliktCommand(\n name = "greet",\n help = "向用户问好"\n) {\n private val name: String by argument(\n help = "用户名"\n )\n\n private val uppercase: Boolean by option(\n "--uppercase", "-u",\n help = "以大写形式输出名称"\n ).flag()\n\n override fun run() {\n val greeting = "你好, $name!"\n if (uppercase) {\n echo(greeting.uppercase())\n } else {\n echo(greeting)\n }\n }\n}\n\nfun main(args: Array<String>) {\n GreetCommand().main(args)\n}\n\n这是一个最简单的 Kotlin CLI 工具,它接受一个名称和一个可选标志。运行它:
\n\n./gradlew run --args="阿列克谢 --uppercase"\n# 输出:你好, 阿列克谢!\n\n仅需 30 行代码——我们就拥有了一个可工作的控制台工具。Clikt 自动生成帮助信息、处理错误并支持 bash/zsh 的自动补全。
\n\n步骤 3:多级命令(类似 Git)
\n\n真正的 Kotlin 控制台应用程序 很少只包含一个命令。让我们创建一个用于处理文件的工具,它支持子命令:
\n\nimport com.github.ajalt.clikt.core.subcommands\n\nclass FileTool : CliktCommand(\n name