sublime仅支持无包、无依赖、无输入交互的单文件java编译运行;需正确配置jdk环境变量、working_dir为$file_path、显式指定-encoding utf-8,且无法处理scanner输入和复杂项目。

能跑通单个 .java 文件的编译和运行,但仅限于无包、无依赖、无输入交互的场景——这是 Sublime 做 Java 轻量开发的真实边界。
javac 和 java 命令在终端里必须都能直接执行
Sublime 不自带 JDK,所有构建动作都靠调用系统 PATH 里的 javac 和 java。如果终端敲 javac -version 报 command not found 或 'javac' is not recognized,Ctrl+B 一定失败。
- Windows:确认
JAVA_HOME指向 JDK 根目录(如C:\Program Files\Java\jdk-21),且%JAVA_HOME%\bin已加入系统PATH - macOS/Linux:用
brew install openjdk@21或apt install openjdk-21-jdk,再检查$PATH是否含$JAVA_HOME/bin - 图形界面启动 Sublime(比如双击图标)时,macOS 可能不继承 shell 环境变量 → 改用终端执行
open -a "Sublime Text"或配置subl命令行工具 - 改完环境变量后,必须彻底退出 Sublime 进程(不是关窗口),否则新变量不会加载
Build System 必须设 "working_dir": "$file_path"
否则 java HelloWorld 找不到类,报“找不到或无法加载主类”。JVM 查找 class 文件严格依赖当前工作目录和 package 声明,而 Sublime 默认不在源文件所在目录执行命令。
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- 文件保存路径为
/demo/HelloWorld.java,public 类名必须是HelloWorld,大小写、拼写全匹配 - 推荐配置(保存为
Packages/User/JavaC.sublime-build):{ "shell_cmd": "javac -encoding UTF-8 \"$file\" && java \"$file_base_name\"", "file_regex": "^.*?([^:]*):([0-9]+):([0-9]+):? (.*)$", "selector": "source.java", "working_dir": "$file_path" } -
$file_base_name是HelloWorld.java去掉扩展名后的名字,正好匹配java HelloWorld的要求 - 别用
./HelloWorld或固定路径,$file和$file_path是 Sublime 提供的安全变量
含中文字符的源码必须显式指定 -encoding UTF-8
Sublime 默认以 UTF-8 编码保存文件,但 javac 在 Windows 上默认用 GBK 解析,不加参数会编译失败或输出乱码。
- 在
shell_cmd中加入-encoding UTF-8参数,如上例所示 - Linux/macOS 一般默认 UTF-8,但加上更稳妥;Windows 下缺它几乎必报错
- 如果用了
package(比如com.example.Hello),必须按包结构建目录,且working_dir仍需设为$file_path,否则javac -d .输出位置和java查找路径会错位
带 Scanner 输入的程序无法在 Sublime 控制台交互
Sublime 的 Build System 输出面板是只读的,System.in 没有绑定真实终端,所以 new Scanner(System.in) 会卡住或抛 NoSuchElementException。
- 测试输入逻辑时,要么注释掉输入部分,用硬编码代替
- 要么把编译好的
.class文件拖进终端手动运行:cd /path/to/file && java HelloWorld - 别尝试用
start cmd /c或pause绕过——这会新开窗口,脱离 Sublime 构建上下文,且无法同步错误定位 - 需要频繁调试 I/O 的场景,建议切回 IntelliJ 或 VS Code + Extension
真正容易被忽略的是:Sublime 对 Java 的支持止步于“单文件命令行执行”,它不解析 import、不管理依赖、不识别 module-info.java、也不处理多模块项目。哪怕只是加一个 commons-lang3,就得手动 -cp 拼路径——这时候,轻量就变成了负重。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










