Sublime Text 需手动配置 Java 构建系统并确保 JDK 环境变量正确:终端能运行 javac/java -version;新建 Build System 指定 -encoding UTF-8 和 -d .;文件路径须严格匹配 package 声明,且文件名与 public 类名一致。

Sublime Text 本身不内置 Java 编译运行支持,必须手动配置 Tools → Build System → New Build System… 并正确指向 javac 和 java 命令。否则会报 ‘javac’ is not recognized 或 Unable to find package java.lang 等错误。
确认 JDK 已安装且 PATH 可用
这是最常被跳过的一步——Sublime 不读取 IDE 级别的 JDK 配置(比如 IntelliJ 的 SDK 设置),只依赖系统终端能直接调用的命令。
- 在终端(Windows CMD/PowerShell、macOS Terminal、Linux Shell)中执行
javac -version和java -version,必须返回版本号 - 如果失败,先配置系统环境变量:
JAVA_HOME指向 JDK 根目录(如C:\Program Files\Java\jdk-17),并把%JAVA_HOME%\bin(Windows)或$JAVA_HOME/bin(macOS/Linux)加入PATH - 重启 Sublime Text(不是仅关闭文件,要彻底退出进程),否则它不会加载新环境变量
创建正确的 Java Build System(支持包结构和中文路径)
默认的 Java.sublime-build 不处理 package 声明、不指定 -encoding UTF-8、不清理旧 .class 文件,极易编译失败或乱码。
打开 Tools → Build System → New Build System…,替换全部内容为:
立即学习“Java免费学习笔记(深入)”;
{
"shell_cmd": "javac -encoding UTF-8 -d . $file && java $file_base_name",
"file_regex": "^(...*?):([0-9]*):?([0-9]*)",
"selector": "source.java",
"variants":
[
{
"name": "Run with args",
"shell_cmd": "javac -encoding UTF-8 -d . $file && java $file_base_name $args"
}
]
}
-
-encoding UTF-8必须显式加,否则含中文字符串或注释时javac报错 -
-d .让javac按照package声明自动创建子目录(如package com.example;→ 输出到./com/example/) - 不推荐用
java -cp . $file_base_name:当有 package 时,java会找com.example.Main类,但当前目录是项目根,不是com上级,所以必须用java $file_base_name(前提是已用-d .正确生成目录结构)
文件保存路径和命名必须匹配 package 声明
Java 编译器强制要求源文件路径与 package 语句一致。Sublime 不提示也不校验,但 javac 直接失败。
- 若代码首行是
package com.foo;,文件必须保存在com/foo/MyClass.java路径下(即com是子目录,不是包名的一部分) - 文件名必须与
public class名完全一致(大小写敏感),例如public class Hello {}→ 文件必须叫Hello.java - 没有
package声明时,文件可放在任意位置,但不能有中文父目录名(某些旧 JDK 在 Windows 下对非 ASCII 路径解析异常)
运行带参数或多个类的程序
基础构建系统只支持无参运行。需要传参或启动非主类,得靠 Build With… 切换变体或临时改命令。
- 按
Ctrl+Shift+B(Windows/Linux)或Cmd+Shift+B(macOS),选Java – Run with args - 输入参数,空格分隔,例如:
apple banana 42 - 若要运行其他类(非当前文件名对应类),手动修改构建系统中的
java $file_base_name为java com.example.OtherClass,或另存为专用构建系统 - 注意:JDK 11+ 移除了
javap等工具的默认包含,但只要javac和java可用,上述配置仍有效
真正卡住人的往往不是配置步骤,而是 JDK 环境变量没生效、文件路径和 package 不匹配、或者忘了保存文件就点 build——Sublime 不自动保存,javac 编译的是磁盘上旧内容。











