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 的语法学习。