Kotlin 命令行編譯
我們一般編寫代碼都會(huì)借助 IDE 工具,因?yàn)檫@樣可以快速提高開發(fā)效率。但是需要去理解一個(gè) Kotlin源文件是如何編譯運(yùn)行的,所以這篇文章將教你如何使用command
來(lái)編譯運(yùn)行 Kotlin 源碼。
1. 下載 Kotlin 編譯器
在 Kotlin 每個(gè)版本中都會(huì)附帶一個(gè)獨(dú)立版本的編譯器kotlin-compiler-xxx.zip
. 目前 Kotlin 的最新版本是1.3.71
. 只要在 Kotlin github 的對(duì)應(yīng)1.3.71
版本 tag 中下載即可。
2. 編譯器安裝
2.1 基于kotlin-compiler zip包手動(dòng)安裝
將下載好的 Kotlin 編譯器zip包,解壓縮到一個(gè)目錄中,并把bin
所在目錄路徑添加到環(huán)境變量中。bin
目錄包含了在 Windows、OS X 及 Linux 上編譯與運(yùn)行 Kotlin 所需的腳本。
以下是bin
目錄中腳本文件,其中.bat
是用于Windows
平臺(tái)編譯運(yùn)行的腳本。kotlinc
是用于編譯 Kotlin 源碼,kotlin
是運(yùn)行Kotlin編譯后產(chǎn)物的。
把bin
所在目錄添加到系統(tǒng)PATH
中,這里以Mac
為例,Windows
平臺(tái)就和普通的環(huán)境變量添加PATH
一致。
#kotlin
export PATH=${PATH}:"/Users/imooc/Desktop/imooc/kotlinc/bin" #這個(gè)路徑就是解壓縮目錄的路徑
2.2 基于 SDKMAN! 安裝
在基于 UNIX
的系統(tǒng)(如 OS X、Linux、Cygwin、FreeBSD 和 Solaris, Windows不支持)上安裝 Kotlin 的更簡(jiǎn)單方法是使用 SDKMAN!。 只需在終端中運(yùn)行以下命令并按照說(shuō)明操作即可:
curl -s https://get.sdkman.io | bash
接下來(lái)會(huì)打開一個(gè)新終端并安裝 Kotlin:
sdk install kotlin
2.3 基于 Homebrew 安裝
如果使用的是 OS X操作系統(tǒng),可以通過(guò) 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 用戶, 有一個(gè)社區(qū)維護(hù)的軟件包 kotlinc 可供使用, 你可以在命令行通過(guò) choco install
進(jìn)行安裝。
2.7 驗(yàn)證安裝環(huán)境
安裝好 Kotlin 編譯器后,只需要在command
中輸入kotlinc
, 如果出現(xiàn)下面這樣信息說(shuō)明安裝成功:
3. 創(chuàng)建并運(yùn)行第一個(gè)應(yīng)用程序
3.1 創(chuàng)建kt源碼文件
隨便使用一個(gè)文本編輯器,記事本之類工具,創(chuàng)建一個(gè) hello.kt 的新文件,然后在文件中編寫以下代碼:
fun main(args: Array<String>) {
println("Hello Kotlin!")
}
3.2 編譯hello.kt
源碼文件
在command
中執(zhí)行以下編譯命令:
kotlinc hello.kt -include-runtime -d hello.jar
## -d 選項(xiàng)表示生成的類文件的輸出路徑,可以是目錄,也可以是一個(gè) .jar 文件。-include-runtime 選項(xiàng)通過(guò)在其中包含 Kotlin 運(yùn)行時(shí)庫(kù),使得生成的 .jar 文件中自包含運(yùn)行時(shí)庫(kù)且可運(yùn)行。 如果要查看所有可用選項(xiàng),請(qǐng)運(yùn)行以下命令:
# kotlinc -help
會(huì)在hello.kt
同級(jí)目錄生成一個(gè)應(yīng)用程序hello.jar
。
3.3 運(yùn)行應(yīng)用程序 hello.jar
在command
中執(zhí)行以下運(yùn)行命令:
java -jar hello.jar
4. 編譯庫(kù)
如果你正在開發(fā)一個(gè)供其他 Kotlin 應(yīng)用程序使用的庫(kù),那么可以構(gòu)建 .jar 文件,而不將 Kotlin 運(yùn)行時(shí)包含在其中。
kotlinc hello.kt -d hello2.jar
可以通過(guò) jar 查看工具來(lái)看:
相比下面這種運(yùn)行時(shí)方式編譯后的產(chǎn)物是不一樣的,下面包含一個(gè)運(yùn)行時(shí)打包:
kotlinc hello.kt -include-runtime -d hello.jar
可以通過(guò) jar 查看工具來(lái)看:
由于以這種方式編譯的二進(jìn)制文件依賴于 Kotlin 運(yùn)行時(shí),因此無(wú)論何時(shí)使用編譯庫(kù),都應(yīng)確保后者存在于類路徑中。還可以使用 kotlin
腳本來(lái)運(yùn)行 Kotlin 編譯器生成的二進(jìn)制文件:
kotlin -classpath hello.jar HelloKt # HelloKt 是 Kotlin 編譯器為名為 hello.kt 的文件生成的主類名。
5. Kotlin 執(zhí)行的交互式 shell
可以運(yùn)行沒(méi)有參數(shù)的編譯器來(lái)?yè)碛薪换ナ?shell??梢暂斎肴魏斡行У?Kotlin 代碼并查看結(jié)果。
由于之前安裝的時(shí)候配置好了kotlin-compiler
,所以我們只需要在command
中輸入kotlinc
就能進(jìn)入交互式的shell, 退出交互shell,只需要輸入:quit
即可。
使用交互式shell,輸出 hello kotlin!
:
使用交互式 shell,計(jì)算三個(gè)數(shù)之和:
6. 運(yùn)行 Kotlin 腳本
Kotlin 也可以用作腳本語(yǔ)言。腳本是具有頂層可執(zhí)行代碼的 Kotlin 源文件(.kts)。
實(shí)例:
實(shí)現(xiàn)一個(gè)輸出當(dāng)前目錄所有文件的 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
}
要運(yùn)行腳本,我們只需使用相應(yīng)的腳本文件將 -script
選項(xiàng)傳遞給編譯器。
kotlinc -script read_files.kts -- -dir xxx
從 Kolint 1.3.0 開始,Kotlin 對(duì)腳本定制提供了實(shí)驗(yàn)性支持,例如添加外部屬性、提供靜態(tài)或動(dòng)態(tài)依賴關(guān)系等。自定義由所謂的 腳本定義 帶有適當(dāng)支持代碼的帶注釋的 kotlin 類定義。腳本文件擴(kuò)展名用于選擇適當(dāng)?shù)亩x。
當(dāng)適當(dāng)?shù)?jar 文件包含在編譯類路徑中時(shí),會(huì)自動(dòng)檢測(cè)并正確應(yīng)用正確編寫的腳本定義?;蚩梢允褂镁幾g器的 -script-templates
選項(xiàng)來(lái)手動(dòng)定義:
kotlinc -script-templates org.example.CustomScriptDefinition -script custom.script1.kts
7. 小結(jié)
到這里有關(guān) kotlin 命令行編譯就結(jié)束,這篇文章很全面闡述了有關(guān) Kotlin 源碼編譯、運(yùn)行過(guò)程以及 Kotlin 的腳本編寫和運(yùn)行。下一節(jié)將正式進(jìn)入 Kotlin 的語(yǔ)法學(xué)習(xí)。