Sublime Text 本身不支持 Java 编译运行,所有功能依赖系统已安装的 JDK 和手动配置的构建系统;核心前提是终端中 javac -version 和 java -version 均能正常输出且版本一致,需正确配置 PATH 与 JAVA_HOME,重启 Sublime 后通过自定义 .sublime-build 文件调用 javac/java 命令,并严格匹配 package 声明与文件路径结构。

Sublime Text 本身不支持 Java 编译运行,所有功能都依赖系统已安装的 JDK 和你手动配置的构建系统;没配对 javac 路径、working_dir 错位、或源码目录与 package 声明不匹配,是报错最集中的三个地方。
确认 javac 和 java 能在终端直接调用
这是整个流程的硬前提。Sublime 不读 JAVA_HOME,也不加载 shell 配置文件(比如 ~/.zshrc),只继承启动时的操作系统环境变量。
- macOS/Linux:在终端执行
which javac和javac -version,必须有输出且版本一致;若无,检查$JAVA_HOME/bin是否已加进PATH - Windows:在 CMD 中运行
where javac和javac -version;失败则去“系统属性→高级→环境变量”,确认Path包含%JAVA_HOME%\bin,且JAVA_HOME指向 JDK 根目录(不是 JRE) - macOS 图形界面启动 Sublime 时,常不继承 shell 环境——改用终端执行
open -a "Sublime Text"或装好subl命令后用它启动 - 改完环境变量后,必须彻底退出 Sublime(不只是关窗口),再重开,否则新变量不会生效
用 JavaC 插件快速编译单文件(无 package、无依赖)
适合算法练习或写小工具,不处理类路径、包结构或跨文件引用。
- 通过 Package Control 安装插件时搜
JavaC(作者 r-stein),别选Java或SublimeJava,后者已过时 - 安装后打开
.java文件,按Ctrl+B(Windows/Linux)或Cmd+B(macOS)即可编译并自动运行 - 该插件默认把
.class输出到源文件同目录,所以如果类声明了package com.example;,就必须把文件放在com/example/Hello.java,否则报error: class Hello is public, should be declared in a file named Hello.java - 它不支持
-cp或外部 jar,遇到cannot find symbol基本就是引用了其他类但插件没处理
手动写 .sublime-build 支持包结构和运行
一旦用了 package、多个类、或需要指定类路径,就得自己建构建系统。核心是控制 javac -d 输出位置和 java 的工作目录与类名拼写。
立即学习“Java免费学习笔记(深入)”;
- 菜单栏 →
Tools→Build System→New Build System… - 替换为以下内容(注意 Windows 路径用双反斜杠,
javac和java命令需确保已在 PATH 中):
{
"shell_cmd": "javac -encoding UTF-8 -d . $file && java $file_base_name",
"file_regex": "^(*?):([0-9]*):?([0-9]*)",
"working_dir": "${file_path}",
"selector": "source.java"
}
-
-d .表示按package层级生成.class子目录(如package com.example;→ 输出到com/example/) -
"working_dir": "${file_path}"是关键:让javac和java都在源文件所在目录执行;若源码在src/com/example/Main.java,就得把working_dir改成${file_path}/../..,否则java com.example.Main找不到类 - 运行时不能用
$file(它是绝对路径),必须用$file_base_name(无后缀文件名);有package时,得手动改成java com.example.Main,构建系统无法自动推导全限定类名
中文乱码和编码不一致问题
Windows 下最典型:源文件是 UTF-8,javac 默认按 GBK 解析,导致编译报 非法字符;或 java 输出中文到 Sublime 控制台变成问号。
- 先确认 Sublime 右下角显示的是
UTF-8,不是UTF-8 with BOM或Western (Windows 1252);不对就点右下角 →Reopen with Encoding→UTF-8 - 构建命令中必须显式加
-encoding UTF-8参数,否则javac用系统默认编码读源码 - Windows 用户可额外加
-Dfile.encoding=UTF-8给java,避免运行时输出乱码 - 别信
chcp 65001,Sublime 的 build 控制台不走 cmd 的 code page
真正卡住的往往不是语法或逻辑,而是 javac 找不到源文件路径、java 找不到类的根目录、或者 UTF-8 源码被当成 GBK 解析——这些细节在构建系统 JSON 里只差一个字段、一个点、或一个参数,但错误信息完全不提示根源。


















