sublime text无法直接执行kotlin脚本,因其不内置kotlin命令运行时;实际需调用kotlinc-jvm编译并java -jar运行,且必须配置-include-runtime、正确main函数签名及环境path。

Sublime Text 不能直接执行 Kotlin 脚本(如 kotlin hello.kt),它压根不带 kotlin 命令运行时;所谓“执行 JVM 脚本”,本质是调用 kotlinc-jvm 编译 + java -jar 运行,且必须处理入口类、运行时依赖和路径空格等细节。
为什么 kotlin 命令在 Sublime 里总报 command not found
因为 kotlin 是 Kotlin 的脚本执行器(类似 Node.js 执行 .js),但它不随 kotlinc 一起安装——官方 zip 包只含 kotlinc 和 kotlinc-jvm,kotlin 命令需额外配置或根本不存在。Mac/Linux 用户若用 SDKMAN! 安装,kotlin 命令才可用;Windows 用户基本没有这个命令,别在 Build System 里硬写 ["kotlin", "$file"]。
- 验证方式:终端里直接运行
kotlin -version,有输出才算真存在 - 绝大多数人实际只有
kotlinc-jvm,它不支持脚本模式,只能编译成 jar - Sublime 启动时继承的是旧 shell 环境变量,PATH 改了必须重启 Sublime 或从终端启动(如
subl .)
kotlinc-jvm 编译时必须加 -include-runtime
不加这个参数,生成的 jar 包不含 Kotlin 标准库,java -jar 运行时必报 NoClassDefFoundError: kotlin/jvm/internal/Intrinsics。这不是 Sublime 的锅,是 Kotlin CLI 的设计使然——它默认只打包你写的 class,标准库得手动“拉进来”。
-
-include-runtime会让编译结果体积变大(+5MB 左右),但能独立运行 - 别用
-d out.jar这种写法:-d指定的是输出目录,不是 jar 路径;正确写法是-d ${file_base_name}.jar - Windows 用户注意:
$file_base_name遇到空格会崩,建议用双引号包裹参数,如"${file_base_name}.jar"
Build System 中的 Run 变体怎么写才不报错 No main manifest attribute
错误信息 no main manifest attribute 表示 jar 包里没写明主类,java -jar 不知道从哪开始执行。Kotlin 的 fun main() 不会自动注册为 MANIFEST.MF 的 Main-Class,必须靠 -include-runtime + 正确的 main 函数签名配合。
- 确保你的
.kt文件里是顶层fun main(),不是包内或 class 内的 - 函数签名必须是
fun main(args: Array<string>)</string>或fun main()(Kotlin 1.7+ 支持无参) - Build System 的 Run 变体应为:
["java", "-jar", "${file_base_name}.jar"],不要加java -cp或试图指定类名 - 如果用了 package,比如
package com.example,那fun main()必须在该 package 下,且文件路径要匹配(如src/com/example/Main.kt)
Windows 上 PowerShell 权限和编码问题怎么绕过去
Windows 默认用 PowerShell 执行 shell: true 构建命令,而 PowerShell 对空格路径、中文路径、重定向符号(&&)更敏感,容易卡住或乱码。CMD 更稳,但 Sublime 默认不走 CMD。
- 最简方案:把
"shell": true改成"shell": false,然后用数组形式写命令,避免 shell 解析 - 例如编译命令写成:
["kotlinc-jvm", "$file", "-include-runtime", "-d", "${file_base_name}.jar"] - PowerShell 默认 UTF-16,Kotlin 编译出错时中文报错可能显示为乱码;可在系统环境变量加
CHCP 65001(UTF-8),或改用 CMD 启动 Sublime - 绝对路径中含空格(如
C:Program Files...)时,别在 cmd 数组里拼接字符串,直接用完整路径加引号:"C:\kotlin\bin\kotlinc-jvm.bat"
真正卡住人的从来不是 JSON 怎么写,而是 kotlinc-jvm -version 在终端能跑,却在 Sublime 里提示 command not found —— 这说明 PATH 没生效,或者你正用快捷方式双击启动 Sublime,它压根没读到你刚配好的环境变量。











