服务端相关 / Kotlin 命令行编译

Kotlin 命令行编译

我们一般编写代码都会借助 IDE 工具,因为这样可以快速提高开发效率。但是需要去理解一个 Kotlin源文件是如何编译运行的,所以这篇文章将教你如何使用command来编译运行 Kotlin 源码。

1. 下载 Kotlin 编译器

在 Kotlin 每个版本中都会附带一个独立版本的编译器kotlin-compiler-xxx.zip. 目前 Kotlin 的最新版本是1.3.71. 只要在 Kotlin github 的对应1.3.71版本 tag 中下载即可。

图片描述

2. 编译器安装

2.1 基于kotlin-compiler zip包手动安装

将下载好的 Kotlin 编译器zip包,解压缩到一个目录中,并把bin所在目录路径添加到环境变量中。bin 目录包含了在 Windows、OS X 及 Linux 上编译与运行 Kotlin 所需的脚本。

图片描述

图片描述
以下是bin目录中脚本文件,其中.bat是用于Windows平台编译运行的脚本。kotlinc是用于编译 Kotlin 源码,kotlin是运行Kotlin编译后产物的。

图片描述

bin所在目录添加到系统PATH中,这里以Mac为例,Windows平台就和普通的环境变量添加PATH一致。

#kotlin
export PATH=${PATH}:"/Users/imooc/Desktop/imooc/kotlinc/bin" #这个路径就是解压缩目录的路径

2.2 基于 SDKMAN! 安装

在基于 UNIX 的系统(如 OS X、Linux、Cygwin、FreeBSD 和 Solaris, Windows不支持)上安装 Kotlin 的更简单方法是使用 SDKMAN!。 只需在终端中运行以下命令并按照说明操作即可:

curl -s https://get.sdkman.io | bash

接下来会打开一个新终端并安装 Kotlin:

sdk install kotlin

2.3 基于 Homebrew 安装

如果使用的是 OS X操作系统,可以通过 Homebrew 安装编译器。

brew update
brew install kotlin

2.4 基于 MacPorts 安装

如果是 MacPorts 用户,那么可以使用以下命令安装编译器:

sudo port install kotlin

2.5 基于 Snap 包安装

如果使用的是 Ubuntu 16.04 或更高版本,那么可以在命令行直接使用 Snap 安装编译器:

sudo snap install --classic kotlin

2.6 基于 Chocolatey 包安装

如果是Windows 下的 Chocolatey 用户, 有一个社区维护的软件包 kotlinc 可供使用, 你可以在命令行通过 choco install 进行安装。

2.7 验证安装环境

安装好 Kotlin 编译器后,只需要在command中输入kotlinc, 如果出现下面这样信息说明安装成功:

图片描述

3. 创建并运行第一个应用程序

3.1 创建kt源码文件

随便使用一个文本编辑器,记事本之类工具,创建一个 hello.kt 的新文件,然后在文件中编写以下代码:

fun main(args: Array<String>) {
    println("Hello Kotlin!")
}

图片描述

3.2 编译hello.kt源码文件

command中执行以下编译命令:

kotlinc hello.kt -include-runtime -d hello.jar

## -d 选项表示生成的类文件的输出路径,可以是目录,也可以是一个 .jar 文件。-include-runtime 选项通过在其中包含 Kotlin 运行时库,使得生成的 .jar 文件中自包含运行时库且可运行。 如果要查看所有可用选项,请运行以下命令:
# kotlinc -help

图片描述

会在hello.kt同级目录生成一个应用程序hello.jar

3.3 运行应用程序 hello.jar

command中执行以下运行命令:

java -jar hello.jar

图片描述

4. 编译库

如果你正在开发一个供其他 Kotlin 应用程序使用的库,那么可以构建 .jar 文件,而不将 Kotlin 运行时包含在其中。

kotlinc hello.kt -d hello2.jar

可以通过 jar 查看工具来看:

图片描述

相比下面这种运行时方式编译后的产物是不一样的,下面包含一个运行时打包:

kotlinc hello.kt -include-runtime -d hello.jar

可以通过 jar 查看工具来看:

图片描述

由于以这种方式编译的二进制文件依赖于 Kotlin 运行时,因此无论何时使用编译库,都应确保后者存在于类路径中。还可以使用 kotlin 脚本来运行 Kotlin 编译器生成的二进制文件:

kotlin -classpath hello.jar HelloKt # HelloKt 是 Kotlin 编译器为名为 hello.kt 的文件生成的主类名。

图片描述

5. Kotlin 执行的交互式 shell

可以运行没有参数的编译器来拥有交互式 shell。可以输入任何有效的 Kotlin 代码并查看结果。

由于之前安装的时候配置好了kotlin-compiler,所以我们只需要在command中输入kotlinc就能进入交互式的shell, 退出交互shell,只需要输入:quit即可。

图片描述

使用交互式shell,输出 hello kotlin!

图片描述

使用交互式 shell,计算三个数之和:

图片描述

6. 运行 Kotlin 脚本

Kotlin 也可以用作脚本语言。脚本是具有顶层可执行代码的 Kotlin 源文件(.kts)。

实例:

实现一个输出当前目录所有文件的 kotlin 脚本(-dir 后跟目录):

import java.io.File

val filePath = if(args.contains("-dir")) args[1 + args.indexOf("-d")] else "."

File(filePath).listFiles { file ->
    println(file)
    return@listFiles true
}

要运行脚本,我们只需使用相应的脚本文件将 -script 选项传递给编译器。

kotlinc -script read_files.kts -- -dir xxx

图片描述

从 Kolint 1.3.0 开始,Kotlin 对脚本定制提供了实验性支持,例如添加外部属性、提供静态或动态依赖关系等。自定义由所谓的 脚本定义 带有适当支持代码的带注释的 kotlin 类定义。脚本文件扩展名用于选择适当的定义。

当适当的 jar 文件包含在编译类路径中时,会自动检测并正确应用正确编写的脚本定义。或可以使用编译器的 -script-templates 选项来手动定义:

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

7. 小结

到这里有关 kotlin 命令行编译就结束,这篇文章很全面阐述了有关 Kotlin 源码编译、运行过程以及 Kotlin 的脚本编写和运行。下一节将正式进入 Kotlin 的语法学习。

图片描述