Sublime Text运行Java需先确保终端中javac -version和which javac均有输出且版本一致,再彻底重启Sublime并手动创建含-d .、-encoding UTF-8及正确working_dir的Java.sublime-build文件。

Sublime Text 本身不装 JDK,也不读 JAVA_HOME 或 shell 配置文件——它只认你系统 PATH 里能直接敲出 javac -version 的那个命令。配不成功,90% 是因为终端能跑通,但 Sublime 启动时根本没拿到 javac。
终端能跑 javac -version 是硬前提
跳过这步,后面全白搭。Sublime 的构建系统只是调用 shell 命令,它不会帮你找 JDK 路径。
- macOS/Linux:打开 Terminal,执行
which javac和javac -version,两个都必须有输出,且版本号一致(比如都是 17.0.2);如果which javac没输出,检查$JAVA_HOME/bin是否在$PATH中,并确认~/.zshrc或~/.bash_profile已 source - Windows:打开 CMD,执行
where javac和javac -version;没输出说明%JAVA_HOME%\bin没进“系统变量”的Path——光设JAVA_HOME不够,必须手动加进去 - Linux 如果
which javac无输出,先装完整 JDK:sudo apt install openjdk-17-jdk - 改完环境变量后,必须彻底退出 Sublime 进程(macOS 右键 Dock 图标 → “退出”,Windows 任务管理器杀掉所有
subl.exe),再重开;否则新PATH不生效
macOS 图形启动 Sublime 不继承 shell 环境
双击图标打开的 Sublime,默认不加载 ~/.zshrc 里的 PATH,这是最隐蔽的坑。
- 临时解法:在 Terminal 里执行
open -a "Sublime Text"启动,它会继承当前终端环境 - 长期解法:先运行
ln -s "/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl" /usr/local/bin/subl,然后一律用subl .打开项目 - 别信“启动就自动读配置”——Sublime 不是终端,它不解析 shell 初始化文件
Build System 必须带 -d . 和 working_dir
默认的 Java 构建系统一写 package 就崩,核心是因为没控制类文件输出位置和运行时工作目录。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
-
-d .让javac按package自动建目录结构(比如com/example/Hello.java编译后生成com/example/Hello.class);不加这个,java根本找不到类 -
working_dir必须设为"$file_path",不能写死成"."或绝对路径;否则import其他类、读取同目录资源、甚至刚生成的.class都会失败 - 中文源码必须加
-encoding UTF-8,否则 Windows 下默认用 GBK 解析,报 “非法字符” - 推荐保存为
Packages/User/JavaC.sublime-build,内容如下:
{
"shell_cmd": "javac -encoding UTF-8 -d . \"$file\" && java -cp . \"$file_base_name\"",
"file_regex": "^.*?:([0-9]+):([0-9]+): (.*)$",
"working_dir": "$file_path",
"selector": "source.java",
"encoding": "utf-8"
}
为什么总报 “Could not find or load main class”
这不是代码错,是 java 命令找不到类的路径或名字。规则就两条:
- 类名 ≠ 文件名:public 类名必须和文件名完全一致(大小写敏感),比如
public class Hello必须存为Hello.java - 类路径必须匹配
package声明:写了package com.example;,文件就必须放在com/example/Hello.java,且java命令要在com的上一级目录运行(即working_dir设对) - 如果用了
import其他类但没编译它们,javac会报cannot find symbol——JavaC 插件不处理跨文件依赖,这种场景必须换手动构建系统
真正卡住的从来不是语法或插件,而是 javac 路径没透传、working_dir 没对齐、或者 package 目录结构和源码不一致——这三个地方错一个,java 就找不到主类。

















