12.1.2 Kotlin 命令行编译器

原文链接: https://kotlinlang.org/docs/command-line.html

12.1.2 Kotlin 命令行编译器

每个 Kotlin 版本都会附带一个独立版本的编译器。你可以手动下载最新版本,也可以通过包管理器安装。

注意: 安装命令行编译器并不是使用 Kotlin 的必要步骤。常见的做法是使用带有官方 Kotlin 支持的 IDE 或代码编辑器(例如 IntelliJ IDEA 或 Android Studio)来编写 Kotlin 应用。它们开箱即用地提供完整的 Kotlin 支持。了解如何在 IDE 中开始使用 Kotlin。

安装编译器

手动安装

要手动安装 Kotlin 编译器:

  1. 从 GitHub Releases 下载最新版本(kotlin-compiler-2.4.20.zip)。
  2. 把独立编译器解压到某个目录,并可选地把 kotlinc/bin 目录添加到系统路径中。bin 目录包含在 Windows、macOS 和 Linux 上编译和运行 Kotlin 所需的脚本。

注意: 如果你想在 Windows 上使用 Kotlin 命令行编译器,我们建议手动安装。

SDKMAN!

在基于 UNIX 的系统(例如 macOS、Linux、Cygwin、FreeBSD 和 Solaris)上,更简单的 Kotlin 安装方式是 SDKMAN!。它也能在 Bash 和 ZSH shell 中工作。了解如何安装 SDKMAN!。

要通过 SDKMAN! 安装 Kotlin 编译器,请在终端中运行以下命令:

1
sdk install kotlin

Homebrew

或者,在 macOS 上你可以通过 Homebrew 安装编译器:

1
2
brew update
brew install kotlin

Snap 包

如果你在 Ubuntu 16.04 或更高版本上使用 Snap,可以从命令行安装编译器:

1
sudo snap install --classic kotlin

创建并运行应用

  1. 用 Kotlin 创建一个显示 "Hello, World!" 的简单控制台 JVM 应用。在代码编辑器中创建一个名为 hello.kt 的新文件,内容如下:
1
2
3
   fun main() {
       println("Hello, World!")
   }
  1. 用 Kotlin 编译器编译该应用:
1
   kotlinc hello.kt -include-runtime -d hello.jar
  • -d 选项指定生成的 class 文件的输出路径,它可以是目录,也可以是 .jar 文件。
  • -include-runtime 选项会把 Kotlin 运行时库包含进去,使生成的 .jar 文件自包含并可运行。

要查看所有可用选项,请运行:

1
   kotlinc -help
  1. 运行该应用:
1
   java -jar hello.jar

注意: 要编译 Kotlin/Native 应用,请使用 Kotlin/Native 编译器。

编译库

如果你在开发供其他 Kotlin 应用使用的库,可以在不包含 Kotlin 运行时的情况下构建 .jar 文件:

1
kotlinc hello.kt -d hello.jar

由于以这种方式编译的二进制文件依赖 Kotlin 运行时,你应当确保在使用编译后的库时,classpath 中存在 Kotlin 运行时。

你也可以使用 kotlinr 脚本来运行由 Kotlin 编译器生成的二进制文件:

1
kotlinr -classpath hello.jar HelloKt

HelloKt 是 Kotlin 编译器为名为 hello.kt 的文件生成的主类名。

注意: 要编译 Kotlin/Native 库,请使用 Kotlin/Native 编译器。

运行 REPL

使用 -Xrepl 编译器选项运行编译器即可获得交互式 shell。在这个 shell 中,你可以输入任何合法的 Kotlin 代码并查看结果。

运行脚本

你可以把 Kotlin 当作脚本语言使用。Kotlin 脚本是包含顶层可执行代码的 Kotlin 源文件(.kts)。

1
2
3
4
5
6
7
8
import java.io.File

// Get the passed in path, i.e. "-d some/path" or use the current path.
val path = if (args.contains("-d")) args[1 + args.indexOf("-d")]
           else "."

val folders = File(path).listFiles { file -> file.isDirectory() }
folders?.forEach { folder -> println(folder) }

要运行脚本,请把 -script 选项和对应的脚本文件传给编译器:

1
kotlinc -script list_folders.kts -- -d <path_to_folder_to_inspect>

Kotlin 对脚本定制提供了实验性支持,例如添加外部属性、提供静态或动态依赖等等。定制由所谓的脚本定义来定义——即带有适当支持代码的、加了注解的 Kotlin 类。脚本的文件扩展名用于选择合适的定义。进一步了解 Kotlin 自定义脚本。

当相应的 jar 被包含在编译 classpath 中时,准备妥当的脚本定义会被自动检测并应用。或者,你也可以通过向编译器传入 -script-templates 选项来手动指定定义:

1
kotlinc -script-templates org.example.CustomScriptDefinition -script custom.script1.kts

更多细节请参阅 KEEP-75。

接下来学什么?

基于 Kotlin/JVM 创建控制台应用。