必须先安装jdk并配置系统环境变量,确保java -version和javac -version均可用;sublime仅调用系统jdk,需手动配置javac.sublime-build,注意路径、编码、classpath等细节。

Java 运行环境必须先装好,java -version 和 javac -version 都得能跑通
Sublime 本身不带 Java 编译器或运行时,它只是个编辑器。你看到“配置 Java 环境”,本质是让 Sublime 调用系统已安装的 javac 和 java。如果终端里敲 java -version 报 command not found 或路径错误,Sublime 肯定也调不动——别急着改 Sublime 配置,先搞定系统级 JDK。
常见错误现象:
• 按 Ctrl+B 后没反应,或者输出框只显示“[Finished]”但没编译结果
• 报错 javac: command not found(macOS/Linux)或 'javac' is not recognized(Windows)
• java -version 能运行,但 javac -version 不行 → 说明只装了 JRE,没装 JDK
- Windows:从 Oracle 或 Eclipse Temurin 下载完整 JDK(含
javac),安装后检查系统环境变量JAVA_HOME是否指向 JDK 根目录(如C:\Program Files\Java\jdk-17.0.1),且%JAVA_HOME%\bin已加入PATH - macOS:推荐用
brew install openjdk@17,然后确认/opt/homebrew/opt/openjdk@17/bin在$PATH里 - Linux:确保安装的是
openjdk-17-jdk(不是-jre),而非仅default-jre
Sublime 的 Build System 必须手动写,不能靠插件自动识别项目结构
Sublime 没有 Maven/Gradle 集成能力,也不解析 pom.xml 或 build.gradle。它只认一个简单的 JSON 配置文件,告诉它:“在当前文件所在目录下,执行哪条命令”。所以你得自己建一个 JavaC.sublime-build,放在 Packages/User/ 目录下。
使用场景:
• 单个 .java 文件快速编译运行(适合学习、刷题)
• 不依赖构建工具的最小可行验证
立即学习“Java免费学习笔记(深入)”;
参数差异关键点:
• shell_cmd 里不能写相对路径如 ./MyClass.java,要用 $file(当前文件全路径)
• 编译后运行要分两步:先 javac $file,再 java $file_base_name;但 Sublime Build System 默认只支持单条命令或 shell 脚本封装
• Windows 和 macOS/Linux 的换行与分隔符不同,别直接复制粘贴跨平台配置
- 推荐做法:用
shell_cmd+&&连写(Windows 用&&),例如:"shell_cmd": "javac \"$file\" && java \"$file_base_name\"" - 注意引号:macOS/Linux 用双引号包裹整个命令,内部变量用
$file;Windows 命令行对引号更敏感,建议统一用cmd /c封装 - 避免把
working_dir设成固定路径——应设为"working_dir": "$file_path",否则import其他类或读取资源文件会失败
中文路径或文件名会导致 javac 编译失败,不是 Sublime 的锅
这是 JDK 8/11/17 在非 UTF-8 终端环境下长期存在的问题。Sublime 调用的是系统 shell,而 shell 的默认编码(Windows 是 GBK,某些 Linux 发行版是 ISO-8859-1)和 Java 源文件编码(通常 UTF-8)不一致,javac 解析文件名时直接报错,比如:error: unmappable character for encoding GBK。
常见错误现象:
• 文件保存为 UTF-8,但编译时报一堆乱码字符错误
• 文件名含中文,javac 直接提示找不到该文件(实际是编码转换失败)
• 同一文件在终端里能编译,但在 Sublime 里不行 → 很可能因为 Sublime 的 build process 没继承终端的 locale 设置
- 最稳解法:所有 Java 源文件路径、包名、类名全部用英文,不碰中文
- 临时绕过:在 Build System 的
env字段强制指定编码,例如:"env": {"JAVA_TOOL_OPTIONS": "-Dfile.encoding=UTF-8"} - Windows 用户额外注意:
chcp 65001切到 UTF-8 并不能彻底解决,因为javac启动时仍可能读取系统区域设置;不如直接避开
调试、依赖管理、单元测试这些事,Sublime 做不了,也别硬塞
Sublime 的 Build System 只负责“保存 → 编译 → 运行”这一条线。它没有调试器集成,不理解 classpath,也不能自动下载 jar 包。如果你需要引用第三方库(比如 gson.jar),就得手动把 -cp 参数加进 shell_cmd,而且每次换项目都要改。
性能 / 兼容性影响:
• 加了 -cp lib/gson.jar:lib/commons-lang3.jar 后,命令变长、易出错,$file_base_name 无法处理包路径(如 com.example.Main)
• 没有语法校验(比如 import 错了、泛型写错了),只有等编译时才报错
• 无法跳转到定义、没有重命名重构、没有实时错误提示
- 真要加依赖:把
shell_cmd改成类似"javac -cp \"lib/*\" $file && java -cp \"lib/*:.\" $file_base_name",注意 Windows 用分号;分隔 classpath - 但更现实的做法是:小练习用 Sublime + 手动编译,中大型项目老实用 IntelliJ IDEA 或 VS Code + Extension
- 容易被忽略的一点:
$file_base_name只返回文件名(不含扩展名),但如果类是package com.test;,你得确保目录结构是com/test/MyClass.java,且在com/test目录下运行编译命令——Sublime 不会帮你 cd 进去










