sublime text 运行 java 依赖系统已安装的 jdk,需先验证终端中 javac/java 可用;macos/linux 用 which/javac -version,windows 用 where/javac -version;环境变量修改后须彻底重启 sublime;推荐用终端启动以继承 shell 环境;javac 插件适合无 package 的单文件编译;复杂项目需手动配置 .sublime-build,关键参数为 -d . 和 -cp .,并严格匹配 package 结构、工作目录与全限定类名;中文源码需加 -encoding utf-8。

Sublime Text 本身不带 Java 编译器或 JVM,所谓“能运行 Java”,就是它调用你系统里已装好的 javac 和 java 命令——如果终端里都跑不通,Sublime 绝对跑不通。
先确认 javac 和 java 在终端能正常调用
这是硬前提,跳过这步后面全白搭。
- macOS/Linux:打开终端,执行
which javac和javac -version,必须有输出且版本号一致(比如都是 17.0.2) - Windows:打开 CMD,执行
where javac和javac -version;没输出说明%JAVA_HOME%\bin没进系统 Path,光设JAVA_HOME不够 - 改完环境变量后,必须彻底退出 Sublime(任务管理器杀进程 / 右键菜单选“退出”),再重开——否则它不会加载新 PATH
- macOS 图形界面启动的 Sublime 常不继承 shell 环境,推荐用终端执行
open -a "Sublime Text"或装好subl后用它启动
用 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 - 遇到
cannot find symbol,基本是引用了其他类但插件没处理——它不支持-cp或外部 jar
手动写 .sublime-build 支持 package 和多类结构
一旦用了 package、多个类、或需要指定类路径,就得自己配构建系统。核心是控制 javac -d 输出位置和 java 的工作目录与类名拼写。
- 菜单栏 → Tools → Build System → New Build System…,替换为以下内容(注意 Windows 路径用双反斜杠):
{
"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"
}
-
-d .是关键:让javac按package自动建com/example/目录并放.class,不加这个就必然报NoClassDefFoundError -
-cp .告诉java从当前目录开始找类,和-d .输出路径严格对应 - 如果类声明了
package com.example;,文件必须放在com/example/MyApp.java,且working_dir必须是com的上一级(即包含com/的那个目录) - 别用
java "$file"——java不接受路径,只认全限定类名,比如com.example.MyApp
Could not find or load main class 到底在报什么
这不是代码错,是构建配置和路径/类名规则没对上。
- 类没写
package:用java $file_base_name安全,但working_dir必须设为$file_path,否则java找不到.class - 写了
package com.example;:文件必须在com/example/Hello.java,working_dir得是com的上一级,且shell_cmd中得写java com.example.Hello,不能用$file_base_name - 中文源码必须加
-encoding UTF-8,否则javac默认用系统编码(Windows 是 GBK)读文件,会报“非法字符” - 构建系统没选对也会一闪而过——右下角状态栏手动切换到你刚保存的
Java构建系统
最常被忽略的是:Sublime 启动时根本不读 ~/.zshrc 或用户环境变量,也不管你 IDE 里怎么配 JDK;它只看系统级 PATH 和你手动写的 env 字段。路径、包结构、类名、工作目录,四者差一个,java 就找不到主类。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











