Sublime Text 运行 Java 依赖系统 JDK,须确保终端中 javac -version 正常输出且版本一致;macOS/Linux 用 which javac 验证,Windows 用 where javac;修改环境变量后需彻底重启 Sublime;推荐手动创建 Java.sublime-build 文件并显式指定 JDK 路径,添加 -encoding UTF-8 支持中文,处理 package 时需匹配目录结构与类名调用。

Sublime Text 本身不带 Java 编译器或 JVM,所有编译运行都依赖你系统里已装好的 javac 和 java 命令能否被正确调用——如果终端里 javac -version 都报错,Sublime 绝对跑不通。
确认 javac 和 java 在终端能正常执行
这是硬门槛,跳过就白忙。不是“差不多行”,而是必须输出一致的版本号(比如都是 JDK 17)。
- macOS/Linux:打开终端,运行
which javac和javac -version,两个命令都要有输出,且版本号匹配 - Windows:打开 CMD,运行
where javac和javac -version;没输出说明%JAVA_HOME%\bin没进系统Path,光设JAVA_HOME不够 - 改完环境变量后,必须彻底退出 Sublime(任务管理器杀进程 / 右键菜单选“退出”),再重开——否则它不会加载新
PATH - macOS 图形界面启动的 Sublime 常不继承 shell 环境,推荐用终端执行
open -a "Sublime Text"或装好subl后用它启动
创建自定义 Java.sublime-build 文件
别用插件(如 JavaC)应付复杂场景,手动建构建系统更可控,尤其涉及 package、中文编码或类路径时。
- 菜单栏 → Tools → Build System → New Build System…
- 替换全部内容为以下 JSON(注意把
C:/Program Files/Java/jdk-17.0.1换成你本地 JDK 路径,Windows 用双反斜杠):
{
"shell_cmd": "javac -encoding UTF-8 -d \"${file_path}\" \"${file}\" && java -cp \"${file_path}\" \"${file_base_name}\"",
"file_regex": "^(*?):([0-9]*):?([0-9]*)",
"working_dir": "${file_path}",
"selector": "source.java",
"env": {
"PATH": "C:/Program Files/Java/jdk-17.0.1/bin;${PATH}"
}
}
- 保存为
Java.sublime-build(不要用JavaC.sublime-build,避免和插件冲突) - 右下角状态栏手动切换构建系统为它,再按
Ctrl+B(Windows/Linux)或Cmd+B(macOS) -
-encoding UTF-8必加,否则含中文的源码会编译报错
处理 package 声明与类路径问题
一旦代码里写了 package com.example;,文件位置、编译输出、运行时 classpath 就全得对上,否则报 NoClassDefFoundError 或 ClassNotFoundException。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
- 源文件必须放在与包名匹配的子目录中:如
package com.example;→ 文件路径必须是com/example/Hello.java - 构建系统的
working_dir得设为该文件的父目录(即com的上一级),而不是${file_path} -
shell_cmd中运行命令要改成java com.example.Hello,不能用${file_base_name} - 若仍报
Error: Could not find or load main class,八成是工作目录不对或类名拼写错误(大小写敏感)
为什么 Ctrl+B 没反应或一闪而过?
这不是代码问题,是构建系统根本没生效或配置错位。
- 确保文件已保存,后缀是
.java(不是.txt,也不是无后缀) - Sublime 不会自动识别
.java就切到 Java 构建系统,必须手动在 Tools → Build System 里选你刚建的Java - 如果用了
package却还用${file_base_name}当类名,java命令根本找不到入口类 - JavaC 插件只适合无
package、无依赖的单文件,一写包结构就失效,别指望它处理真实项目
最易被忽略的是:Sublime 启动时读取的环境变量,和你在终端里改的 ~/.zshrc 或 Windows 系统变量不是同一份;哪怕终端能跑,Sublime 也可能找不到 javac——显式在 env 字段写死 JDK 路径,比赌 PATH 继承更可靠。

















